2013-07-06 5 views
0

Я тогда следующий запрос:запрос Помощь - Где Статья

mysql_select_db($database_conndb1, $conndb1); 
$query_rsName = sprintf(" 
SELECT DISTINCT 
table1.search_id, table1.search1, table1.search2, table1.search3, table1.search4, table1.search5, table1.search6, table1.search7, table1.search8, table1.search9, table1.search10, table1.search11, table1.search12, table1.search13, table1.search14, table1.search15, table1.search16, table2.search_id 

FROM table1, table2 
WHERE 
table2.criteria1 = %s OR 
table2.criteria2 = %s OR 
table2.criteria3 = %s OR 
table2.criteria4 = %s OR 
table2.criteria5 = %s OR 
table2.criteria6 = %s OR 
table2.criteria7 = %s OR 
FIND_IN_SET(%s, table2.criteria8) OR 
table2.criteria9 = %s OR 
table2.criteria10 = %s OR 
table2.criteria11 = %s AND 
table1.search_id = table2.search_id 
ORDER BY 
table1.search2 DESC", 
GetSQLValueString($search1_rsName, "text"), 
GetSQLValueString($search2_rsName, "text"), 
GetSQLValueString($search3_rsName, "text"), 
GetSQLValueString($search4_rsName, "text"), 
GetSQLValueString($search5_rsName, "text"), 
GetSQLValueString($search6_rsName, "text"), 
GetSQLValueString($search7_rsName, "text"), 
GetSQLValueString($search8_rsName, "text"), 
GetSQLValueString($search9_rsName, "text"), 
GetSQLValueString($search10_rsName, "text"), 
GetSQLValueString($search11_rsName, "text")); 

Однако, когда запрос RAN, она тянет все записи и делает каждую запись в десять раз - не только те, которые основаны на критериях поиска , Теперь, если я изменяю OR на AND и выбираю все 11, он работает так, как должен. Таким образом, это имеет какое-то отношение к OR операнду. Однако я не могу понять, что не так. Какой операнд я могу использовать помимо ИЛИ, который позволит этому работать - чтобы поисковик мог выбрать 1, 2, 3 или более критериев?

+0

Просьба отформатировать код/​​запрос. И, пожалуйста, напишите свой заголовок (сделайте его описательным). – PeeHaa

+0

у вас есть картезианское соединение там, если вы видите те же записи, что и X, количество строк в таблице соединений ... – Trent

ответ

0

Это один адский вопрос, и я думаю, он работает целую вечность. Тем не менее, здесь корректируется один:

mysql_select_db($database_conndb1, $conndb1); 
$query_rsName = sprintf(" 
SELECT DISTINCT 
table1.search_id, table1.search1, table1.search2, table1.search3, table1.search4, table1.search5, table1.search6, table1.search7, table1.search8, table1.search9, table1.search10, table1.search11, table1.search12, table1.search13, table1.search14, table1.search15, table1.search16, table2.search_id 

FROM table1, table2 
WHERE (
table2.criteria1 = %s OR 
table2.criteria2 = %s OR 
table2.criteria3 = %s OR 
table2.criteria4 = %s OR 
table2.criteria5 = %s OR 
table2.criteria6 = %s OR 
table2.criteria7 = %s OR 
FIND_IN_SET(%s, table2.criteria8) OR 
table2.criteria9 = %s OR 
table2.criteria10 = %s OR 
table2.criteria11 = %s) AND 
table1.search_id = table2.search_id 
ORDER BY 
table1.search2 DESC", 
GetSQLValueString($search1_rsName, "text"), 
GetSQLValueString($search2_rsName, "text"), 
GetSQLValueString($search3_rsName, "text"), 
GetSQLValueString($search4_rsName, "text"), 
GetSQLValueString($search5_rsName, "text"), 
GetSQLValueString($search6_rsName, "text"), 
GetSQLValueString($search7_rsName, "text"), 
GetSQLValueString($search8_rsName, "text"), 
GetSQLValueString($search9_rsName, "text"), 
GetSQLValueString($search10_rsName, "text"), 
GetSQLValueString($search11_rsName, "text")); 

Примечание круглые скобки вокруг OR часть WHERE пункта.

+0

Спасибо, спасибо, спасибо! Я знаю, что это более старый способ кодирования, но это то, что я знаю и понимаю. Я пробовал много вещей с круглыми скобками, но не так, как вы предлагаете - это сработало отлично! –

0
SELECT DISTINCT 
table1.search_id, table1.search1, table1.search2, table1.search3, table1.search4, table1.search5, table1.search6, table1.search7, table1.search8, table1.search9, table1.search10, table1.search11, table1.search12, table1.search13, table1.search14, table1.search15, table1.search16, table2.search_id 

FROM table1 
join table2 on table1.search_id = table2.search_id 
WHERE 
table2.criteria1 = %s OR 
table2.criteria2 = %s OR 
table2.criteria3 = %s OR 
table2.criteria4 = %s OR 
table2.criteria5 = %s OR 
table2.criteria6 = %s OR 
table2.criteria7 = %s OR 
FIND_IN_SET(%s, table2.criteria8) OR 
table2.criteria9 = %s OR 
table2.criteria10 = %s OR 
table2.criteria11 = %s 
ORDER BY 
table1.search2 DESC" 
+0

Я еще не понимаю сообщения JOIN, но пытался учиться, поскольку я продолжаю сталкиваться с ними, когда я изучал свою проблему. Спасибо за ваш ответ, я буду помнить об этом. –

+0

Я предлагаю, чтобы у вас сначала нужно немного прочитать о соединениях. это не продвинутая тема в SQL. на самом деле это важно. важно никогда не откладывать важные вещи. u может вывести их и понять, что такое базовое соединение. в любом случае, указав, что table1.search_id = table2.search_id является объединением. я только что переместил его, чтобы убедиться, что OR и AND не вмешиваются в эти критерии .. u r делает соединение в действительности urself !! но лучше читать. – user1974729

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