2009-12-01 25 views
1

所以這是我的查詢,它無所謂,如果批准設置爲0或1它無論如何會給我所有的行mysqli查詢,LIKE和AND在同一個查詢不會像它應該

SELECT * 
FROM `tutorials` 
WHERE tags LIKE '% php %' OR tags LIKE 'php %' OR tags LIKE '% php' OR tags = 'php' 
AND approved=1 

我想這是因爲OR,但我可能是錯的,如果有人可以幫助我走出這個:)

回答

6

嘗試括號

SELECT * 
FROM `tutorials` 
WHERE (  tags LIKE '% php %' 
      OR tags LIKE 'php %' 
      OR tags LIKE '% php' 
      OR tags = 'php' 
     ) 
AND approved=1 
1

我沒有得到你到底想要什麼。但是,這可能是你正在尋找

SELECT * FROM tutorials WHERE 標籤LIKE '%PHP%' 的一個或類似的PHP%「標籤或標籤LIKE '%PHP' 或標記= 'PHP' 批准= 1

2

我認爲你缺少一些冒號:

SELECT * 
FROM `tutorials` 
WHERE (tags LIKE '% php %' OR tags LIKE 'php %' OR tags LIKE '% php' OR tags = 'php') 
AND approved=1 

原因你應該包括冒號,是因爲OR和AND運算符的優先級相同。當你省略了冒號,您的查詢將被解析爲:在查詢中使用和OR的長列表和運營商尤其是當

SELECT * 
FROM `tutorials` 
WHERE (tags LIKE '% php %' OR (tags LIKE 'php %' OR (tags LIKE '% php' OR (tags = 'php' 
AND approved=1)))) 

,最好是使用冒號,使你的意圖明確。有關MySQL中運算符優先級的完整列表(其他SQL方言通常通用),請參閱the MySQL manual