Je compte les enregistrements avec des requêtes comme
SELECT COUNT(col1) FROM table1 WHERE col1 LIKE '%something%'
SELECT COUNT(col1) FROM table1 WHERE col1 LIKE '%another%'
SELECT COUNT(col1) FROM table1 WHERE col1 LIKE '%Word%'
Pour chaque comptage, mysql doit parcourir la table, et c'est un gros problème si vous avez une longue table et de nombreuses requêtes.
Je me demande s'il existe un moyen de faire tous les comptes en une seule requête. Dans ce cas, lorsque mysql parcourt chaque ligne, il traitera tous les décomptes, et pas besoin de balayer la table entière encore et encore.
Pour obtenir un décompte pour chacun de ceux que vous pouvez essayer
SELECT
COUNT(CASE WHEN `col1` LIKE '%something%' THEN 1 END) AS count1,
COUNT(CASE WHEN `col1` LIKE '%another%' THEN 1 END) AS count2,
COUNT(CASE WHEN `col1` LIKE '%Word%' THEN 1 END) AS count3
FROM `table1`;
Similaire à la solutio d'Aaron, syntaxe plus courte:
SELECT
SUM(col1 LIKE '%something%') AS count1,
SUM(col1 LIKE '%another%') AS count2,
SUM(col1 LIKE '%Word%') AS count3
FROM `table1`
L'expression LIKE donne un résultat booléen. TRUE
est 1, FALSE
est , donc le CASE
est redondant ici.