2014-12-15 2 views
2

Есть ли лучший способ, чем это?mysql-запрос с использованием нескольких операторов OR

SELECT * FROM tagcloud 
WHERE (usertag_tag = 1 
OR usertag_tag = 2 
OR usertag_tag = 3  
OR usertag_tag = 4) 

Что делать, если я хочу добавить больше тегов в запрос, продолжаю ли я добавлять инструкции OR?

+0

вы можете использовать не равны? например, если у вас есть 6 тегов и требуется только 1-5, используйте 'usertag_tag! = 6' – Jim

+3

Используйте' usertag_tag IN (1,2,3,4,5) ', который является стандартным SQL и будет функционировать как' OR 'цепочка. –

+0

Оператор [IN()] (http://dev.mysql.com/doc/refman/5.6/en/comparison-operators.html#function_in). –

ответ

3

вы можете использовать простую версию

SELECT * FROM tagcloud 
WHERE usertag_tag in (1,2,3,4); 

Надеется, что это помогает

+0

Пожалуйста, отметьте это как ответ, если он сработает для вас. –

+0

Большое спасибо – Jason

0

Вы можете использовать оператор IN:

SELECT * FROM tagcloud WHERE user_tag IN(1,2,3,4) 
0

Вы должны подготовить список и сделать выбор из него:

$tags = array(1, 2, 3, 4); 
$query = "SELECT * FROM tagcloud WHERE usertag_tag IN (" . implode(',', $tags) . ")"; 
0

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

SELECT * FROM tagcloud 
WHERE usertag_tag in (select id from the_other_table) 

если нет, то это нормально

SELECT * FROM tagcloud 
WHERE usertag_tag in (1,2,3,4) 
0

Вы могли бы использовать массив, подобный этому,

$sql = "SELECT * FROM tagcloud WHERE user_tag IN "; 

$j = 6; 

for($i = 0; $i< $j; $i++){ 
$queryArray[] .= "('". $i. "')"; 
} 

$sql .= implode(',', $queryArray); 

Просто измените j на нужное вам значение.

0

Использование MySQL В

SELECT * FROM tagcloud 
WHERE (usertag_tag = 1 
OR usertag_tag = 2 
OR usertag_tag = 3  
OR usertag_tag = 4) 

/* You are checking whether usertag_tag is either 1, 2, 3 OR 4*/ 

эквивалентно:

SELECT * FROM tagcloud 
WHERE (usertag_tag IN (1, 2, 3, 4)) 
/* You are checking usertag_tag is one of the values in the array given as 
array(1, 2, 3, 4) 
If you want to add more values, just add elements to the array, that is it. 
*/ 

Объяснение:

Если мы сравниваем одно значение, мы используем =.

Если нам нужно найти строки с заданным полем в одном из значений (массив значений), мы используем IN.

MySQL IN функции логически так же, как РНР in_array()