Сравните результат MySQL в PHP

#php

#php

Вопрос:

Я получил некоторый результат из базы данных и хочу отобразить результат отдельно.

Если pb_title совпадает с temp_title, тогда поместите его в div красного цвета, иначе pb_title не совпадает с temp_title, тогда поместите его в div серого цвета

Вот мой пробный код :

 $select_brand = "SELECT * FROM tblProduct_Brand WHERE pb_display='display'";
$result = mysqli_query ($mydatabase, $select_brand);

if($result)
{
while($row = mysqli_fetch_array($result))
{
$pb_feature_image = substr(($row['pb_feature_image']),3);
$pb_logo = substr(($row['pb_logo']),3);         
$temp_result;
if($temp_result == $row["pb_title"])
{
    //if product brand title is same, put it in same area
    echo '<div style="padding:20px; background-color:red;">';
        echo '<div style="display:inline-block;width:340px;height:250px;vertical-align:top;">';
        echo '<img src="'.$pb_feature_image.'" width="100%" height="100%"/>';
        echo '</div>';
        echo '<div style="display:inline-block;width:330px;height:250px;padding-left:10px;">';
        echo '<div style="height:40px;width:80px;float:right">';
        echo '<img src="'.$pb_logo.'" width="100%"/>';
        echo '</div>';
        echo '<div style="clear:both"></div>';
        echo '<a class="product-content">'.$row["pb_content"].'</a>';
        echo '</div>';
    echo '</div>';
    $temp_result = $row["pb_title"];
}
else
{
    //if not same, put in another area
    echo '<div style="padding:20px; background-color:grey;">';
        echo '<div style="display:inline-block;width:340px;height:250px;vertical-align:top;">';
        echo '<img src="'.$pb_feature_image.'" width="100%" height="100%"/>';
        echo '</div>';
        echo '<div style="display:inline-block;width:330px;height:250px;padding-left:10px;">';
        echo '<div style="height:40px;width:80px;float:right">';
        echo '<img src="'.$pb_logo.'" width="100%"/>';
        echo '</div>';
        echo '<div style="clear:both"></div>';
        echo '<a class="product-content">'.$row["pb_content"].'</a>';
        echo '</div>';
    echo '</div>';
}
}
  

Любая ошибка в коде, пожалуйста, исправьте меня.
Спасибо.

Комментарии:

1. С какими ошибками вы сталкиваетесь. ?

2. @Adeel Я не могу поместить тот же результат pb_title в тот же div. Например, если заголовок row1 и заголовок row2 совпадают, результат будет отображаться в красном поле div. И заголовок строки 3 не совпадает с заголовком строки 2, он будет отображаться в сером окне div.

3. Я думаю, вам нужно немного прояснить, что вы пытаетесь сделать. Объяснения пока имеют очень мало смысла.

4. @user3663143 Позвольте мне понять это правильно; вы хотите добавить все заголовки, которые соответствуют одному div, вместо создания нового div для каждого из них?

5. @Darren У меня здесь есть два div с красным и серым цветом. Я хочу, чтобы все совпадающие заголовки были в КРАСНОМ div, а не совпадающие заголовки — в СЕРОМ div.

Ответ №1:

Следующий код предполагает, что вы сделали что-то подобное с данными, которые вы извлекли из sql-запроса:

 $data = array();
while($row = mysqli_fetch_assoc($result)) {
    $data[] = $row;
}
  

Который возвращает массив, подобный этому:

 Array (
    [0] => Array(
        'pb_title' => '',
        'pb_content' => '',
        //...etc
    ),
    //.....etc
)
  

Теперь, предполагая, что я правильно понял ваш вопрос, вы хотели бы сделать что-то вроде этого:

 $i = array();
$key = 'A';
foreach ($data as $item) {
    if ($item['pb_title'] == $key) {
        $i['red'][] = $item;
    } else {
        $i['grey'][] = $item;
    }
}
  

Который дает вам массив red (совпадающий) и grey (не совпадающий).

Который вы можете перебирать и соответствующим образом генерировать свои div . Что-то вроде этого (псевдокод)

 echo '<div style="padding:20px; background-color:red;">';
foreach($i['red'] as $row) {
    echo '<div style="display:inline-block;width:340px;height:250px;vertical-align:top;">';
        echo '<img src="'.$pb_feature_image.'" width="100%" height="100%"/>';
        echo '</div>';
        echo '<div style="display:inline-block;width:330px;height:250px;padding-left:10px;">';
        echo '<div style="height:40px;width:80px;float:right">';
        echo '<img src="'.$logo.'" width="100%"/>';
        echo '</div>';
        echo '<div style="clear:both"></div>';
        echo '<a class="product-content">'.$row["pb_content"].'</a>';
        echo '</div>';
}
echo '</div>';
  

Example

Комментарии:

1. был ли другой способ без использования массива? Можем ли мы использовать оператор if else для этого ..?

2. @user3663143 все они будут в одном и том же 1 подразделении или будут иметь свои собственные подразделения?

3. Они переходят к своему собственному div

Ответ №2:

 $temp_result;
if($temp_result == $row["pb_title"])
  

Перед проверкой условия вы должны были присвоить некоторое значение $temp_result , но вы этого не сделали, и вы все равно сравниваете его.

Редактировать :

Я понимаю, что изначально вы не установили никакого значения $ temp_result, и оно всегда поступает в ваш блок Else, где вы не присваиваете $temp_result = $row["pb_title"]; , так что оно должно сохранять предыдущее значение, вы сделали это только в блоке If , вам нужно поместить тот же код и в ваш блок else..

Просто отредактируйте этот раздел в своем коде

 else
{
    //if not same, put in another area
    echo '<div style="padding:20px; background-color:grey;">';
        echo '<div style="display:inline-block;width:340px;height:250px;vertical-align:top;">';
        echo '<img src="'.$pb_feature_image.'" width="100%" height="100%"/>';
        echo '</div>';
        echo '<div style="display:inline-block;width:330px;height:250px;padding-left:10px;">';
        echo '<div style="height:40px;width:80px;float:right">';
        echo '<img src="'.$pb_logo.'" width="100%"/>';
        echo '</div>';
        echo '<div style="clear:both"></div>';
        echo '<a class="product-content">'.$row["pb_content"].'</a>';
        echo '</div>';
    echo '</div>';

    $temp_result = $row["pb_title"]; // added this to save previous result
}
  

Комментарии:

1. Да, я пробовал раньше. Тогда вывод всего результата будет отображаться в виде красного цвета в поле div.

2. Что должна содержать эта переменная $temp_result. ?

3. Я хочу, чтобы начальный заголовок row1 был «A», а заголовок row2 тоже был «A». Поэтому поместите их в один и тот же красный div. Когда выполняется цикл до row3 и заголовок равен «B», тогда будет отображаться поле div серого цвета.

4. $temp_result используется для хранения pb_title, который получает

5. могу ли я сделать «A» и заголовок результатом, который я получаю из базы данных? это означает, что ЕСЛИ текущий заголовок не совпадает с предыдущим заголовком, чем отдельный.

Ответ №3:

Убедитесь, что программирование должно быть эффективным, для этого вам нужно иметь следующие идеи:

1) Здесь вам не нужно использовать if($result) , потому что, когда результаты sql верны, только тогда это позволит выполнить условие

2) При программировании старайтесь избегать большего if else условия для повышения эффективности.

 <?php
$select_brand = "SELECT * FROM tblProduct_Brand WHERE pb_display='display'";
$result = mysqli_query ($mydatabase, $select_brand);


while($row = mysqli_fetch_array($result))
{
$pb_feature_image = substr(($row['pb_feature_image']),3);
$pb_logo = substr(($row['pb_logo']),3);         

$temp_result;

if($temp_result == $row["pb_title"]) { $style = 'style="padding:20px; background-color:red;"'; }
else { $style = ' style="padding:20px; background-color:grey;"'; }

    echo '<div '.$style.' >';
        echo '<div style="display:inline-block;width:340px;height:250px;vertical-align:top;">';
        echo '<img src="'.$pb_feature_image.'" width="100%" height="100%"/>';
        echo '</div>';
        echo '<div style="display:inline-block;width:330px;height:250px;padding-left:10px;">';
        echo '<div style="height:40px;width:80px;float:right">';
        echo '<img src="'.$pb_logo.'" width="100%"/>';
        echo '</div>';
        echo '<div style="clear:both"></div>';
        echo '<a class="product-content">'.$row["pb_content"].'</a>';
        echo '</div>';
    echo '</div>';
    $temp_result = $row["pb_title"];
}


?>