sql >> Database >  >> RDS >> Mysql

Tel het aantal LIKE-matches per Inzending

In MySQL kunnen booleaanse uitdrukkingen worden gebruikt als gehele getallen -- met 0 voor onwaar en 1 voor waar. Dus het volgende werkt:

SELECT p.*,
       ((name LIKE '%samsung%') + (name LIKE '%galaxy%') + (name LIKE '%s4%')) as hits
FROM   myprods p
WHERE  name LIKE '%samsung%' OR name LIKE '%galaxy%' OR name LIKE '%s4%';

BEWERKEN:

Als MySQL, kunt u deze vraag ook uitdrukken als:

SELECT p.*,
       ((name LIKE '%samsung%') + (name LIKE '%galaxy%') + (name LIKE '%s4%')) as hits
FROM   myprods p
HAVING hits > 0;

Het gebruik van having in deze context is een SQL-extensie en werkt niet in andere databases. Maar het staat wel toe dat een zoekopdracht naar een kolomalias verwijst om te filteren, zonder een subquery te gebruiken.




  1. MySql kan de bovenliggende rij niet bijwerken als ik ON UPDATE CASCADE heb

  2. LIKE vs BEVAT op SQL Server

  3. Terugknop exploits voorkomen? PHP

  4. Zoekfunctie met Griekse karakters in MySQL