Publié par Fabrice le 19 septembre 2018 - Temps de lecture estimé : 2 minutes
Catégories :
Webmastering
- Étiquettes :
MySQL
snippet
Une requête SQL pour les rechercher tous !
Dans le but de construire un moteur de recherche global, il peut être utile d'effectuer une union de plusieurs requêtes. Cela permet de regrouper les résultats pour avoir, par la suite, un affichage homogène.
Le seul inconvénient, c'est qu'il faut que les requêtes utilisent le même nombre de colonnes avec des types de données et un ordre identique (dans l'exemple id
et title
).
SELECT SQL_CALC_FOUND_ROWS * FROM (
SELECT table1_id, table1_title, 'table1' as 'table' FROM table1
WHERE table1_title LIKE '%keyword%'
UNION ALL
SELECT table2_id, table2_title, 'table2' as 'table' FROM table2
WHERE table2_title LIKE '%keyword%'
) tmp_table
ORDER BY RAND()
Grâce à l'utilisation de SQL_CALC_FOUND_ROWS
, le nombre total de résultats peut se retrouver avec SELECT FOUND_ROWS()
.
Enfin, sachez que lors de la boucle, vous devrez utiliser les noms des colonnes de la première requête (dans l'exemple table1_id
et table1_title
).