la query mysqli, LIKE ed AND nella stessa query non funziona come dovrebbe
-
22-07-2019 - |
Domanda
quindi questa è la mia domanda, non importa se approvato è impostato su 0 o 1 mi darà comunque tutte le righe
SELECT *
FROM `tutorials`
WHERE tags LIKE '% php %' OR tags LIKE 'php %' OR tags LIKE '% php' OR tags = 'php'
AND approved=1
Suppongo sia a causa dell'OR, ma potrei sbagliarmi, se qualcuno potesse darmi una mano :)
Soluzione
Prova le parentesi
SELECT *
FROM `tutorials`
WHERE ( tags LIKE '% php %'
OR tags LIKE 'php %'
OR tags LIKE '% php'
OR tags = 'php'
)
AND approved=1
Altri suggerimenti
Penso che ti manchino alcuni punti:
SELECT *
FROM `tutorials`
WHERE (tags LIKE '% php %' OR tags LIKE 'php %' OR tags LIKE '% php' OR tags = 'php')
AND approved=1
Il motivo per cui dovresti includere i due punti è perché gli operatori OR ed AND hanno lo stesso livello di precedenza. Quando si omettono i due punti, la query verrà analizzata come:
SELECT *
FROM `tutorials`
WHERE (tags LIKE '% php %' OR (tags LIKE 'php %' OR (tags LIKE '% php' OR (tags = 'php'
AND approved=1))))
Soprattutto quando si utilizzano lunghi elenchi di operatori OR ed AND in una query, è consigliabile utilizzare due punti per chiarire le proprie intenzioni. Per un elenco completo della precedenza dell'operatore in MySQL (che è generalmente comune ad altri dialetti SQL), vedere il manuale di MySQL .
Non ho ottenuto quello che volevi esattamente. Ma questo potrebbe essere quello che stai cercando
SELEZIONA * DA
tutorial
DOVE ( TAGLI COME '% php%' OR tag LIKE 'php%' OR tag LIKE '% php' OR tag = "php" ) E approvato = 1