2015-09-22 3 views
-3

Вот мой запрос к mysql с php;Запрос Mysql с ключевыми словами

$keywords = "keywords LIKE'%keyword1%' OR keywords LIKE'%keyword2%' OR keywords LIKE'%keyword3%'"; 

mysql_query("SELECT * FROM table1 LEFT JOIN table2 ON table1.cat = cat.CATID WHERE category = '$catid' and ($keywords) limit 12"); 

Что я хочу сделать, это ключевые слова для поиска ключевых слов в строке с или утверждением, но моя проблема в том, первое ключевое слово всегда полный 12 предел, так что я ищу только для 1 ключевого слова с этим кодом.

Я хочу найти максимум 2 результата по ключевому слову ... Я собираюсь сделать это с помощью PHP или есть способ выполнить это с помощью запроса MYSQL?

+0

почему бы вам не изменить ограничение 12, чтобы ограничить 2 ?? –

+0

Вы можете написать процедуру хранения в mysql, или вы можете сделать это в php, запустив свою функцию для ключевого слова individula с лимитом 2; – jewelhuq

ответ

1

здесь более компактный вариант решения MaggsWebs:

$common_query = "SELECT * 
    FROM table1 
    LEFT JOIN table2 ON table1.cat = cat.CATID 
    WHERE category = '$catid' 
    AND keywords LIKE "; 

$keywords = ['keyword1', 'keyword2', 'keyword3']; // change keywords in one place 
$sql = "SELECT * FROM (
    ".$common_query."'%{$keywords[0]}%' LIMIT 2 UNION 

    ".$common_query."'%{$keywords[1]}%' LIMIT 2 UNION 

    ".$common_query."'%{$keywords[2]}%' LIMIT 2 
) as results "; 
+0

После ввода каждой ВЫБРАТЬ внутри() его работает. (SELECT * FROM table1 LEFT JOIN table2 ON table1.cat = cat.CATID WHERE category = '$ catid' И ключевые слова LIKE '% keyword3%' LIMIT 2) –

+0

Вы правы. Была ошибка в соответствующем выпуске: https://bugs.mysql.com/bug.php?id=70828 Спасибо за подсказку) – RomanPerekhrest

+0

RomanPrekhrest теперь есть еще одна проблема, Думайте, что 1-я строка в mysql имеет 5 ключевые слова, как 'keywords1' 'keywords2' 'keywords3' 'keywords4' 'keywords5' 2th строка имеет 3 ключевых слов 'keywords1' 'keywords2' 'keywords3' Третий ряд имеет 4 ключевых слов 'keywords1' 'keywords2' ' keywords3 '' keywords4 ' Когда я ищу' keywords1 '' keywords2 'из-за всех ключевых слов в первой и второй строке, то будет найдена только одна запись. –

2

Что делать с каждым ключевым словом в отдельном запросе (достижение максимальных результатов на одно ключевое слово), а затем объединить все результаты вместе (используя UNION), чтобы получить только один набор результатов.

SELECT * FROM (

    SELECT * 
    FROM table1 
    LEFT JOIN table2 ON table1.cat = cat.CATID 
    WHERE category = '$catid' 
    AND keywords LIKE'%keyword1%' 
    LIMIT 2 

    UNION 

    SELECT * 
    FROM table1 
    LEFT JOIN table2 ON table1.cat = cat.CATID 
    WHERE category = '$catid' 
    AND keywords LIKE'%keyword2%' 
    LIMIT 2 

    UNION 

    SELECT * 
    FROM table1 
    LEFT JOIN table2 ON table1.cat = cat.CATID 
    WHERE category = '$catid' 
    AND keywords LIKE'%keyword3%' 
    LIMIT 2 

) as results 

Programatically, вы могли бы сделать подзапросы в «петле» для любого количества ключевых слов, что делает его способным обрабатывать любое количество ключевых слов.

NB: results - временный псевдоним таблицы, который должен существовать для хранения результатов, но не используется ни для чего другого.

+0

После установки каждого SELECT внутри() он работает. (SELECT * FROM table1 LEFT JOIN таблица2 ON table1.cat = cat.CATID WHERE категория = '$ CatID' И ключевые слова LIKE '% KEYWORD3%' LIMIT 2) –

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