2013-05-24 2 views
0

я имею эту проблему прямо здесь .. я получил 3 + идентификаторы строк в таблице, 3 из них являются по ключевым словам:MySQL выберите ключевые слова из 3-х строк

kw1, kw2, kw3 

И тогда я значение

$kw1, $kw2, $kw3 

так таблица выглядит

id | kw1 | kw2 | kw3 | 
---------------------- 
1 | $kw1| $kw2| $kw3| 
.... 

По этому запросу я могу выбрать только тогда, когда все три из них соответствует

SELECT id FROM table WHERE kw1='".$kw1."' OR kw2 = '".$kw2."' OR kw3 = '".$kw3."' 

Я также пытался сделать что-то вроде этого:

SELECT id FROM table WHERE 
(kw1='".$kw1."' OR kw2 = '".$kw2."' OR kw3 = '".$kw3."') OR 
(kw1='".$kw3."' OR kw2 = '".$kw2."' OR kw3 = '".$kw1."') OR 
(kw1='".$kw2."' OR kw3 = '".$kw2."' OR kw3 = '".$kw1."') OR 
... ETC 

Но я хотел спросить, есть ли какой-то другой путь - «умнее» один?

Спасибо!

+2

Вы должны переосмыслить свой дизайн базы данных - я думаю, что ключевые слова должны иметь собственную таблицу. Что делать, если вы хотите иметь 4 ключевых слова для какого-то элемента? – 1615903

+0

@ user1615903 Или вы можете использовать ключевые слова в одном поле с разделителем. '| KW1 | KW2 | kw3 |' - это позволяет вам LIKE '% | $ query |%' или взорваться ('|', $ db_result). Но тогда, предлагая изменения структуры БД, обычно бессмысленно, слишком много кода вращается вокруг текущей структуры. –

ответ

3

Вы можете упростить синтаксис с помощью in:

SELECT id 
FROM table 
WHERE kw1 in ($kw1, $kw2, $kw3) or 
     kw2 in ($kw1, $kw2, $kw3) or 
     kw3 in ($kw1, $kw2, $kw3) 

Кстати, вы можете иметь столбцы в in списке, а также константы:

SELECT id 
FROM table 
WHERE $kw1 in (kw1, kw2, kw3) or 
     $kw2 in (kw1, kw2, kw3) or 
     $kw3 in (kw1, kw2, kw3) 

Если вы хотите, где все три затем измените значение or на and. (Ваш код и ваше описание, кажется, отличаются от того, хотите ли вы любой, чтобы соответствовать или все, чтобы соответствовать.)

+0

Спасибо, это дружелюбный ответ! – Peter

2

Что вы пытаетесь достичь? Эти поисковые запросы или что-то подобное? Если вы пытаетесь выполнить поиск, вы можете использовать MySQL full text search in BOOLEAN MODE.

SELECT id FROM table WHERE kw1='".$kw1."' OR kw2 = '".$kw2."' OR kw3 = '".$kw3."' 

Этот запрос будет соответствовать даже если только KW1 это равняется $ KW1, вы должны использовать и заявление вы хотите три из них совпадают.

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