2009-06-30 19 views
0

Ich habe eine Abfrage geschrieben, um ähnliche IDs basierend auf Tags aus einer aktuellen ID zu finden, ähnlich wie amazons, die Sie auch möchten. Das Problem ist, in meinem Beispiel möchte ich Bookid 30 von dieser Suche ausschließen.Über spezifische MySQL-Abfrage funktioniert nicht

Hier ist meine Frage:

Anmerkung: $ ähnlich ist im Grunde eine Zeichenfolge mit Tags gefüllt mit ein paar „wie% item% oder“

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

Der Teil, der nicht funktioniert aufgebaut ist, wo bookid! = Ich habe es versucht NICHT, <> Nachbestellung und was auch immer ich sonst finden könnte. Diese Abfrage funktioniert immer noch es gibt drei Zeilen aus, aber immer noch Bookid 30

Kann jemand erklären, was hier abgeht? Wird meine Abfrage zu kompliziert und muss neu strukturiert werden?

Die schlechte Alternative, die ich mir ausgedacht habe, war, das Limit auf 4 Elemente zu setzen, die es an eine while-Schleife schicken, um jede Zeile zu holen und die Bookid auszuschließen, die ich nicht brauche. Dies scheint nur sinnlos, wenn ich weiß, dass es in der Abfrage durchgeführt werden kann.

Ive dies durch den Wiederaufbau meiner Anfrage feste und ähnliche string $ Vor

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 

Nach

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 

Eine Sache, die ich bemerkt haben, das ist BookID seltsam! = Funktioniert nur, wenn es einen gibt am gleiten und zwischen jedem gleich oder ... ich habe versucht, jeden auszuwechseln und die frage würde nicht laufen, aber die aktuelle string funktioniert perfekt!

Danke,

+0

Können Sie eine vollständige Abfrage-String einfügen ausgewertet werden? Oder ein Beispielwert von $ ähnlich? thx –

Antwort

5

Stellen Sie sicher, dass Ihre $ ähnliche Variablen in Klammern gewickelt.

, wenn ein oder in der Mitte ist, wird es als

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

statt

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

Clever denken. Ich wollte das Poster bitten, seine Tabelle mit der Möglichkeit zu beschreiben, dass es sich bei dem ID-Feld um eine Textzeichenfolge anstatt um eine Ganzzahl oder etwas anderes handelt, aber dies scheint eine viel wahrscheinliche Erklärung zu sein. – zombat

+0

Ich habe meine $ ähnliche Zeichenkette neu aufgebaut, indem ich jeweils in earringhasis und $ bookid! = Eingefügt habe. Das hat super funktioniert! Diese Seite spart mir STUNDEN !! Ich danke dir sehr. Für jeden Interessierten habe ich meinen Beitrag bearbeitet, um vor und nach einer Abfragezeichenfolge zu zeigen – askon

Verwandte Themen