2015-12-13 3 views
2

В настоящее время я работаю над базой данных веб-сайта. Весь сайт закодирован в PHP (процедурный стиль и не объектно-ориентированный), конечно же с обязательным CSS/HTML и т. Д.Форматирование MySQL Результаты поиска

У меня все работает нормально, но мне трудно понять, как отформатировать поиск результаты, как мне хотелось бы.

Прямо сейчас, я показываю результаты поиска в формате таблицы, причем каждая ячейка таблицы отображает другую переменную из поиска. Все эти маленькие таблицы отображаются вертикально в одном столбце, один за другим, до конца результатов.

То, что я пытаюсь сделать, это отобразить два столбца результатов поиска рядом друг с другом, чтобы одновременно отображать больше результатов на экране. Мне удалось отобразить два столбца с повторяющимися результатами, но мне бы хотелось, чтобы два столбца чередующихся, не дублированных результатов.

Текущее расположение моих результатов что-то вроде:

Result 1 
Result 2 
Result 3 
Result 4 

То, что я был в состоянии достигнуть в моих попытках:

Result 1 Result 1 
Result 2 Result 2 
Result 3 Result 3 
Result 4 Result 4 

То, что я хотел бы иметь:

Result 1 Result 2 
Result 3 Result 4 
Result 5 Result 6 
Result 7 Result 8 

Может ли кто-нибудь пролить свет на то, как этого достичь? Я не уверен, что это простое решение для форматирования CSS/HTML или решение PHP/MySQL.

Ниже приведен код, который специально относится к петле, которая показывает мои результаты:

$link = mysqli_connect(ALL MY INFO); 

include('strings.php'); //This script sets the SQL search string based on user input. 

echo '<br />'; 

$query = mysqli_query($link, $string) or die ("Error retrieving search results. Error in (main.php) search function."); 

$resultrows = mysqli_num_rows($query); 

echo '<table> 
     <tr> 
      <td colspan=2> 
       <h3>Showing '.$resultrows.' results. </h3> 
      </td> 
     </tr> 
     <tr> 
      <td>'; 

while ($result = mysqli_fetch_assoc($query)){  
    include('results.php'); //This script formats each search result  
} 

echo '  </td> 
      <td>'; 

$query = mysqli_query($link, $string) or die ("Error retrieving search results. Error in (main.php) search function."); 

while ($result = mysqli_fetch_assoc($query)){ 
    include('results.php');  
} 

echo '  </td> 
     </tr> 
    </table>'; 
+0

Посмотрите здесь http://stackoverflow.com/a/9153969/3200799 – Core972

+0

(На боковой ноте я прошу прощения за плохо отформатированный код. Я работаю на старом ноутбуке и нахожусь во власти Блокнота. ..) – Nathan

+0

@Nathan Начал писать ответ, прежде чем вы отправили свой код, но я считаю, что мой пример должен быть в состоянии чисто смешиваться с вашим кодом. Возможно, это должно закончиться логикой 'results.php', но общая концепция работает. Удачи! – JakeGould

ответ

0

Я считаю, что магическое решение вашей проблемы будет использовать modulus (remainder) operator in PHP:

REMAINDER из $ a делится на $ b.

Может быть нечетное понятие, чтобы понять, если вы не в математике и программировании-все о логике действительно, но как только вы получите то, что модуль (остаток) оператор может сделать, это волшебная вещь.

В основном вычислить модуль на основе счетчика в цикле. И тогда в этот момент остальная часть значения модуля будет равна 0 ... Et voilà! Вы можете что-то сделать! В приведенных ниже примерах используются таблицы и строки, но одна и та же базовая концепция может использоваться для других элементов HTML или любой логики форматирования.

Например, давайте рассмотрим этот простой PHP код для создания таблицы на основе простого массива алфавита:

$array = range('a','z'); 

echo '<table border="1">'; 
echo '<tr>'; 

foreach ($array as $key => $value) { 
    echo '<td>'; 
    echo $value; 
    echo '</td>'; 
} 

echo '</tr>'; 
echo '</table>'; 

Выход будет один стол с одной большой уродливой подряд, что делает так:

a b c d e f g h i j k l m n o p q r s t u v w x y z 

Но если мы добавим модуль логики к соединению, как это:

$row_cell_amount = 2; 
$array = range('a','z'); 

echo '<table border="1">'; 
echo '<tr>'; 

$counter = 1; 
foreach ($array as $key => $value) { 
    echo '<td>'; 
    echo $value; 
    echo '</td>'; 
    if ($counter % $row_cell_amount == 0 && $counter != 0) { 
    echo '</tr>'; 
    echo '<tr>'; 
    } 
    $counter++; 
} 

echo '</tr>'; 
echo '</table>'; 

Выход будет чисто добавлять новую строку каждый раз, когда значение $counter равномерно соответствует оператору модуля, что приводит к 0; aka: нет остатка. Таким образом, результат будет выглядеть следующим образом со значением 2 для $row_cell_amount:

a b 
c d 
e f 
g h 
i j 
k l 
m n 
o p 
q r 
s t 
u v 
w x 
y z 

И если вы отрегулировали $row_cell_amount быть что-то вроде 4, то выход будет что-то вроде этого:

a b c d 
e f g h 
i j k l 
m n o p 
q r s t 
u v w x 
y z 

Небольшое примечание, но в этом простом примере вы можете установить $key+1 вместо создания $counter, но просто показывая метод $counter, так как вы можете иметь дело с ассоциативными массивами, которые не являются численными или не численно упорядоченными до тех пор, пока ключевые значения идут.

Смежные вопросы