J'écris un programme PHP/MySQL et j'aimerais savoir comment effectuer une recherche sur plusieurs tables en utilisant MySQL. Fondamentalement, j'ai un champ de recherche comme en haut à droite de la plupart des sites, et lorsque l'utilisateur recherche quelque chose dans cette boîte, il doit chercher dans users.username, users.profile_text, uploads.title, uploads.description, sets.description et comments.text. J'ai besoin d'obtenir l'ID (stocké dans un champ d'identification dans chaque tableau) et si possible, un google comme extrait.Recherche de plusieurs tables avec MySQL
Répondre
Vous pouvez écrire votre procédure pour interroger chacune de ces tables individuellement, ou vous pouvez créer une vue relativement simple qui conglomère toutes les colonnes interrogeables des tables importantes avec un indicateur indiquant de quelle table elles proviennent. Il n'y a pas vraiment de manière magique de rechercher plusieurs tables autres que d'écrire les instructions normalement.
La seconde approche ressemblerait à quelque chose comme ceci:
(SELECT 'Table 1' AS TableName, id as Id, text as Searchable
FROM table1)
UNION
(SELECT 'Table 2' AS TableName, table2_id as Id, name as Searchable
FROM table2)
UNION
...
Ensuite, la recherche sur la vue obtenue. Il est important de noter que cette méthode ne sera pas rapide. Une alternative similaire et plus rapide consisterait à dédier une table à cette tâche au lieu d'une vue, et à la remplir lors de l'insertion/mise à jour/suppression des tables réelles au lieu de la recalculer lors de l'accès.
Pour écrire une requête de sélection adaptée à chacune des tables, vous pouvez regrouper les résultats pour obtenir un ensemble de résultats. On dirait que cela ressemblera à quelque chose comme ceci:
select 'user-name', id, username from users where username like '%term%'
union
select 'user-profile', id, profile from users where profile like '%term%'
union
select 'uploads-title', id, title from uploads where title like '%term%'
union
select 'uploads-description', id, description from uploads where description like '%term%'
Peut être la recherche en texte intégral est ce que vous avez besoin.
Regardez
- 1. Recherche plein texte MySQL sur plusieurs tables
- 2. COUNT Mysql (*) sur plusieurs tables
- 3. MySQL plusieurs tables et plusieurs lignes
- 4. MySql: Sélection à partir de plusieurs tables
- 5. Plusieurs tables de données en PHP/MySQL?
- 6. mySQL recherche dans plusieurs lignes
- 7. Performance MySQL: Table unique ou plusieurs tables
- 8. Comment sélectionner plusieurs tables en utilisant mysql?
- 9. Rails: Recherche de plusieurs tables à partir d'une requête
- 10. Conception à plusieurs niveaux, tables de recherche et entités personnalisées
- 11. Recherche PHP et MySQL sur plusieurs colonnes
- 12. Recherche par mot-clé, plusieurs tables, PHP et Mysql, Quels membres utiliser?
- 13. Recherche deux tables
- 14. Rejoindre et rechercher plusieurs tables MySQL avec des relations un-à-plusieurs
- 15. mysql plusieurs requêtes avec php
- 16. Utilisation de plusieurs tables, plusieurs valeurs avec Min() SQL
- 17. Recherche plein texte pour plusieurs tables dans SQl Server 2005
- 18. mysql recherche sur deux tables avec une sorte de jointure interne
- 19. MySQL supprimer plusieurs tables en utilisant ON ne fonctionne pas
- 20. SSIS recherche floue avec plusieurs sorties par erreur de recherche
- 21. Limit MySQL avec plusieurs à plusieurs
- 22. recherche de plusieurs-à-plusieurs
- 23. PHP MySQL Joining Tables
- 24. Requête d'insertion efficace contre plusieurs tables dans MySQL
- 25. Groupe Linqdatasource par problème avec plusieurs tables
- 26. Sélection de plusieurs valeurs différentes tables
- 27. tables de vidage mysql seulement
- 28. plusieurs critères de recherche
- 29. NHibernate Cartographie de plusieurs tables
- 30. Supprimer de plusieurs tables ASP.NET
+1 très intéressant, merci pour infos – vitto
Le 3e approché (table dédiée) peut être améliorée: 1 - La vue dédiée peut être mis à jour automatiquement avec les déclencheurs: a) pour chaque table ('Table 1',' Table 2'); b) pour l'événement AFTER (minimise le temps de réponse). c) pour tous les types d'instructions (INSERT, UPDATE, DELETE); 2 - Vous devez ajouter une colonne supplémentaire (par exemple 'source') avec le nom de la table/entité à partir duquel les données ont été récupérées pour d'éventuelles actions supplémentaires. –