Suchen mehrerer Begriffe in mehreren Tabellen

vyanna

Grünschnabel
Hallo,

ich möchte in meiner Datenbank die aus mehreren Tabellen besteht eine Abfrage nach mehreren Begriffen durchführen. Die Datensätze in den Tabellen können jeweils durch ihre Nummern identifiziert werden. deshalb sollen alle Nummern ausgegeben werden, in denen sich beide Suchbegriffe befinden. Im Moment bekomme ich allerdings mit dieser Abfrage:

Code:
select distinct file_data.number from file_data, author_data, file_description, used_products 
where 
(file_data.name like '%test%' 
or file_data.type like '%test%' 
or file_data.version like '%test%' 
or author_data.name like '%test%' 
or file_description.description like '%test%' 
or used_products.name like '%test%' ) 
and 
(file_data.name like '%muster%' 
or file_data.type like '%muster%' 
or file_data.version like '%muster%' 
or author_data.name like '%muster%' 
or file_description.description like '%muster%' 
or used_products.name like '%muster%' )

alle Datensätze die überhaupt einen der Begriffe enthalten. Hat jemand eine Idee, wie ich das ganze zum funktionieren bringen kann?

Wenn ich distinct weglassen würde, damit es mir Nummern auch doppelt ausgibt, und dann nur die Nummern auswähle die mehrfach dabei waren geht nicht, weil ja auch ein suchbegriff in mehreren spalten vorkommen kann.

Mit Unterabfragen geht glaub ich auch schlecht, da die Anfrage in Abhängigkeit von der Anzahl der Suchbegriffe über ein php script generiert wird.

Vielen Dank für eure Hilfe, gruß, vyanna
 
Hallo,

so muß es gehen:

select distinct file_data.number from file_data, author_data, file_description, used_products
where ( (file_data.name like '%test%' and file_data.name like '%muster%')
or (file_data.type like '%test%' and file_data.type like '%muster%')
or (file_data.version like '%test%' and file_data.version like '%muster%')
or (author_data.name like '%test%' and author_data.name like '%muster%')
or (file_description.description like '%test%' and file_description.description like '%muster%')
or (used_products.name like '%test%' and used_products.name like '%muster%')
)
 
vielleicht solltest du bei einer größeren Datenmenge über eine anderen kontruktion nachdenken.

Zum Beispiel eine weitere Tabelle mit den primaryKey aus den Tabellen: file_data, author_data, file_description, used_products und
in der letzten Spalten der Tabelle ein Feld "KEY-ID" aufnehmen, immer folgenden Werte enthält:
Feldinhalt= type & version & author_data.name & file_description.description & used_products.name

Für die Zukunft kann die Abfrage dann einfach so heißen
Select * from file_data, author_data, file_description, used_products, Tabelle
inner join ........... on ........
where (tabelle.key-id like '%muster%' or tabelle.key-id like '%test%' ).

Wenn du allerdings darauf verzichten möchtest eine weitere Tabelle zu erstellen, solltest du mal deine schlüsselverknüpfung prüfen.
 
Zurück