什么东西= 1;不使用连接表MYSQL

时间:2015-04-18 06:16:47

标签: mysql

尽管所有行中的available = 0,我仍然在这个sql中返回所有返回的行(好像可用的是1):

SELECT * FROM grfx_s_search LEFT 
JOIN grfx_s_search_data ON grfx_s_search.id = grfx_s_search_data.id 
WHERE ( tags REGEXP '[[:<:]]abstract[[:>:]]' ) OR ( title REGEXP '[[:<:]]abstract[[:>:]]' ) 
AND grfx_s_search_data.available = 1 
ORDER BY date_added DESC LIMIT 0, 32

我对此很困惑!我确定这是一个简单的答案 - 我只是看不出这里出了什么问题。

问题,简单说明:

为什么我在所有项目中可用= 0时返回行?

2 个答案:

答案 0 :(得分:3)

你必须在这里使用()

WHERE (( tags REGEXP '[[:<:]]abstract[[:>:]]' ) OR ( title REGEXP '[[:<:]]abstract[[:>:]]' ) ) AND grfx_s_search_data.available = 1 

如果你不这样做,首先评估结束和or。

答案 1 :(得分:0)

您需要使用

AND grfx_s_search_data.available = 0

不是

AND grfx_s_search_data.available = 1

还将OR条件放在一个括号中

SELECT * FROM grfx_s_search LEFT 
JOIN grfx_s_search_data ON grfx_s_search.id = grfx_s_search_data.id 
WHERE (( tags REGEXP '[[:<:]]abstract[[:>:]]' ) OR ( title REGEXP '[[:<:]]abstract[[:>:]]' ) )
AND grfx_s_search_data.available = 0 
ORDER BY date_added DESC LIMIT 0, 32