2009-06-30 22 views
0

私は現在のIDのタグに基づいて類似のIDを見つけるクエリを書いています。問題は、私の例では、この検索からbookid 30を除外したいということです。ここで非常に具体的なmysqlクエリが動作しない

は私のクエリです:

注:$似ては、基本的に機能していない部分があるいくつかの「%などのアイテム%または」

$query = "SELECT * FROM books 
      WHERE bookid !=30 
      AND {$similar} 
      AND visible ='1' 
      AND level ='2' 
      LIMIT 3"; 

で築き上げたタグで満たされた文字列でありますwhere bookid!=私は試しましたが、<>並べ替えなど、これまでに見つけたものは何ですか?このクエリはまだ動作しますが、3行を出力しますが、まだブックIDが含まれています30

ここには何が起こっているのか説明できますか?私のクエリは複雑すぎて再構築する必要がありますか?

私はそれぞれの行をフェッチし、私は必要としないbookidを除外するために、whileループに送信限度に4つの項目を作っていた思い付いてきた貧しい人々の代替。これは、クエリで実行できることが分かっているときは、無意味に思えます。 1がある場合

アイブ氏は、私がbookidれる奇妙での通知をした

SELECT * FROM books WHERE bookid !=30 AND (bookid!=30 AND tags LIKE '%one%') OR (bookid!=30 AND tags LIKE '% two%') OR (bookid!=30 AND tags LIKE '% three%') AND visible ='1' AND level ='2' LIMIT 3 

一つ後

SELECT * FROM books WHERE bookid !=30 AND tags LIKE '%one%' OR tags LIKE '% two%' OR tags LIKE '% three%' AND visible ='1' AND level ='2' LIMIT 3 

前に私のクエリおよび$似た文字列 を再構築することによって、これを固定!=のみ動作します私はそれぞれをスワップしてみましたが、クエリは実行されませんでしたが、現在の文字列は完全に機能します!

おかげで、

+0

として評価されるのですか?または$類似の値の例? thx –

答えて

5

はあなたの$同様の変数は括弧に包まれていることを確認します。

ORは途中にある場合は、完全なクエリ文字列を貼り付けることができ、それは

(bookid != 30 AND item like '%item1%') OR (item like '%item2%' AND visible = 1 AND level= 2) 

代わりの

bookid != 30 AND (item like '%item1%' OR item like '%item2%') AND visible = 1 AND level= 2 
+0

賢い考​​え。私は、idフィールドが代わりにintまたは何かのテキスト文字列があったことを機会に彼のテーブルを記述するためにポスターを依頼するつもりだったが、これははるかに可能性のある説明のように思えます。 – zombat

+0

私はparenthasisと$ bookid!=をそれぞれ追加して、$類似の文字列を再構築しました。 これは素晴らしい機能でした!このサイトは時間を節約します!どうもありがとうございます。 は興味がある人のために私は、クエリ文字列の後にbefoer&を示すために私のポストを編集しました – askon

関連する問題