la query mysqli, LIKE ed AND nella stessa query non funziona come dovrebbe

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

  •  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 :)

È stato utile?

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

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top