Aşırı belirli mysql sorgu çalışmıyor

1 Cevap php

Ben çok Amazonlar gibi, siz de istiyorsunuz, bir akım id gelen etiketleri dayalı benzer kimlikleri bulmak için bir sorgu yazdım. Sorun benim örnekte ben bu aramanın BookID 30 dışlamak istiyor, olduğunu.

İşte benim sorgu:

not: benzer $ temelde bir "% kalemi gibi% ya da" az ile inşa etiketleri ile dolu bir dizedir

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

BookID! = Ben denedim <> yeniden düzenleyerek ve şimdiye kadar başka ne bulabiliriz, DEĞİLDİR nerede çalışmıyor parçasıdır. Bu sorgu hala üç satır çıktılar ama hala 30 BookID içerir çalışır

Birisi burada ne oluyor açıklayabilir misiniz? benim sorgu çok karmaşık hale geliyor ve yeniden gerekir mi?

Yoksul bir alternatif Ben limiti her satır getirme ve ben gerekmez BookID dışlamak için bir süre döngü göndermeden 4 ürün alıyordu ile geldi. Ben sorguda yapılabilir biliyorum zaman bu sadece anlamsız görünüyor.

Ive fixed this by rebuilding my query and $similar string Before

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

Sonra

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

Garip Farkettim bir şey var beginging de biridir ve her arasında ben her Çıkış swaping çalıştı ve sorgu çalıştırmak olmaz gibi ya ... ne zaman = çalışır! BookID, ancak mevcut dize mükemmel çalışır!

Teşekkürler,

1 Cevap

Lütfen $ benzer değişkenleri parantez sarılmış emin olun.

OR ortada ise, bu gibi değerlendirilecektir

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

yerine

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