mysqli Abfrage, LIKE und und in der gleichen Abfrage funktioniert nicht aus, wie es sollte

StackOverflow https://stackoverflow.com/questions/1824962

  •  22-07-2019
  •  | 
  •  

Frage

so ist dies meine Frage, ist es egal, ob auf 0 gesetzt genehmigt oder 1 es gibt mir alle Zeilen sowieso

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

Ich denke, es ist wegen der OR ist, aber ich könnte falsch sein, wenn jemand mir auf diesem helfen könnte out:)

War es hilfreich?

Lösung

Versuchen Klammern

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

Andere Tipps

Ich glaube, Sie einige Doppelpunkte fehlen:

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

Der Grund, warum Sie Doppelpunkte enthalten sollen, ist, weil OR und AND-Operatoren auf dem gleichen Niveau des Vorrangs sind. Wenn Sie die Doppelpunkte auslassen, würde Ihre Abfrage als analysiert werden:

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

Vor allem, wenn lange Listen von OR und AND-Operatoren in einer Abfrage verwendet, ist es ratsam, Doppelpunkte zu verwenden, um Ihre Absicht deutlich zu machen. Für eine vollständige Liste der Rangfolge der Operatoren in MySQL (die in der Regel gemeinsam mit anderen SQL-Dialekten sind) finden Sie unter MySQL-Handbuch .

ich nicht bekommen, was Sie genau wollen. Aber das kann derjenige sein, der Sie suchen

  

SELECT * FROM tutorials WHERE    ( -Tags LIKE '% php%' OR-Tags wie 'php%' OR-Tags LIKE '% php' OR tags =   'Php' ) und genehmigt = 1

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top