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"));

ただし、クエリが実行されると、検索条件に基づくレコードだけでなく、すべてのレコードがプルされ、各レコードが 10 回実行されます。ここで、OR を AND に変更して 11 個すべてを選択すると、正常に機能します。したがって、ORオペランドと関係があります。しかし、私は何が間違っているのか理解できません。検索者が 1 つ、2 つ、3 つ、またはそれ以上の基準を選択できるようにするために、OR 以外に使用できるオペランドは何ですか?

4

2 に答える 2

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"
于 2013-07-06T21:25:14.023 に答える
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

于 2013-07-06T20:10:51.187 に答える