2015-03-30 2 views
2

Следующий код работает хорошо, но я не смог найти способ ограничить количество результатов. Любые идеи, пожалуйста?Как ограничить результаты поиска при использовании foreach и while циклов

$q = "some keywords for search"; // always escape 
    $keys = explode(" ",$q); 
    $query = "SELECT * FROM table WHERE para LIKE '%$q%' "; 

    foreach($keys as $k) 
    { 
     $query .= " OR para LIKE '%$k%'"; 
    } 

    $result = $mysqli->query($query); 

    while($row = $result->fetch_assoc()) 
    { 
     if ($row != 0) { 
     $title = $row['title']; 
    } 
    } 

Любая помощь при оценке.

Примечание: в $ q хранятся ключевые слова для поиска, а затем код взорван и поиск ключевых слов в 2 этапа: 1- как одно предложение с использованием ($ q как есть). 2- он ищет каждое ключевое слово как массив после взрыва $ q (вот часть, которую выполняет «foreach»). После этого циклы кода с использованием «while», чтобы найти все результаты, соответствуют поисковому запросу.

+0

'$ запрос =. «ИЛИ para LIKE»% $ k% 'LIMIT x_number ";' вот где он идет, а не в первой части. Вам также не хватает закрывающей скобки. –

+0

Должен ли я удалить это^ –

+0

@ Fred-ii- Да, вы правы, когда я использую «предел» на этом этапе, код работает хорошо, так как он находит ключевые слова в базе данных, но если он не нашел ни одного из их, я получаю следующую ошибку: Неустранимая ошибка: вызов функции-члена fetch_assoc() на boolean в строке fetch_assoc() – weblover

ответ

1

Используйте LIMIT после заполнения вашего запроса.

Кроме того, если вы хотите, чтобы получить результаты, отсортированные некоторыми полями в таблице, можно также сказать, "ORDER BY FIELDNAME ASC | DESC"

Как следует:

$q = "some keywords for search"; // always escape 
$keys = explode(" ",$q); 
$query = "SELECT * FROM table WHERE para LIKE '%$q%' "; 

foreach($keys as $k) 
{ 
    $query .= " OR para LIKE '%$k%'"; 
} 

$query .= " LIMIT 10"; //<<<<<<<<<<<<<<<  

$result = $mysqli->query($query); 

while($row = $result->fetch_assoc()) 
{ 
    if ($row != 0) { 
    $title = $row['title']; 
} 
+0

WOW, вы сделали это. Большое вам спасибо :) – weblover

+0

Добро пожаловать :) –

0

Используйте LIMIT.

SELECT * FROM table WHERE para LIKE '%$q%' LIMIT 2 
+0

Я пробовал это, но это не сработало, потому что запрос делится на 3 части. – weblover

+0

Сделайте свой пример понятным, и мы постараемся его исправить. –

+0

Хорошо, я отредактирую его снова, спасибо. – weblover

0

Вы можете ограничить количество результатов в запросе MySQL, например, так:

$query = "SELECT * FROM table WHERE para LIKE '%$q%' LIMIT 5"; 

это ограничит его до 5 результатов. Если вы хотите 10, измените его на 10

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