2009-03-09 17 views
1

Ich schreibe ein PHP/MySQL-Programm und würde gerne wissen, wie man mit MySQL mehrere Tabellen durchsuchen kann.Mehrere Tabellen mit MySQL durchsuchen

Grundsätzlich habe ich ein Suchfeld wie oben rechts auf den meisten Websites, und wenn Benutzer etwas in diesem Feld suchen, muss es in users.username, users.profile_text, upload.title, upload.description suchen, sets.description und comments.text. Ich muss die ID (in einem ID-Feld in jeder Tabelle gespeichert) und wenn möglich einen Google-ähnlichen Auszug erhalten.

Antwort

4

Sie können entweder Ihre Prozedur schreiben, um jede dieser Tabellen einzeln abzufragen, oder Sie können eine relativ einfache Ansicht erstellen, die alle durchsuchbaren Spalten der wichtigen Tabellen zusammenfügt, zusammen mit einem Indikator, aus welcher Tabelle sie stammen. Es gibt nicht wirklich einen magischen Weg, um mehrere Tabellen zu durchsuchen, außer die Anweisungen normal zu schreiben.

würde Der zweite Ansatz wie folgt aussehen:

(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 
... 

auf der resultierende Ansicht Suchen Sie dann. Es ist wichtig zu beachten, dass diese Methode nicht schnell sein wird.

Eine ähnliche und schnellere Alternative wäre, eine Tabelle für diese Aufgabe anstatt einer Ansicht zu reservieren und sie beim Einfügen/Aktualisieren/Löschen der realen Tabellen zu füllen, anstatt sie beim Zugriff neu zu berechnen.

+0

+1 sehr interessant, danke für Infos – vitto

+0

Der dritte näherte (dedicated Tabelle) verbessert werden kann: 1 - Die dedizierte Ansicht kann automatisch mit Triggern aktualisiert werden: a) für jede Tabelle ("Tabelle 1", "Tabelle 2"); b) für das Ereignis AFTER (minimiert die Antwortzeit). c) für alle Anweisungsarten (INSERT, UPDATE, DELETE); 2 - Sie sollten eine zusätzliche Spalte (z. B. 'Quelle') mit dem Namen der Tabelle/Entität hinzufügen, von der die Daten für mögliche weitere Aktionen abgerufen wurden. –

0

Um eine Select-Abfrage zu schreiben, die auf jede der Tabellen zugeschnitten ist, können Sie die Ergebnisse zusammenführen, um eine Ergebnismenge zu erhalten. Es sieht so aus:

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%' 
Verwandte Themen