/MySQL suchanfrage über mehrere tabellen
Roger
- php
1 Christian Kruse0 Roger
moin!
wie formuliert man (vereinfacht) eine suchanfrage über mehrere tabellen?
bsp:
tab1
id|name|datum|[...]
tab2
id|tab1id|xy|[...]
tab1 ist so eine art adressdatenbank.
tab1id in tab2 enthält die id aus tab1. tab2 enthält sogn. aktionen. kann also mehrere einträge mit gleicher tab1id haben.
sucht man jetzt nur nach spalte xy, so muss nur tab2 geprüft werden.
(select * from tab2 where xy like '%search%')
sucht man aber nach allen zeilen in tab2, die 'name' ausgeführt hat, wirds kompliziert. bzw. weiß ich nicht weiter, weil ja tab1id in name aufgelöst werden muss.
ich hoffe ich konnte in ungefähr mein problem schildern. hat jmd einen ansatz für mich? 1000dank!
gruß.
roger.
你好 Roger,
wie formuliert man (vereinfacht) eine suchanfrage über mehrere tabellen?
Du Joinst die notwendigen Tabellen zusammen (z. B. über LEFT JOIN) und
verknüpfst die Vergleiche für jedes Feld mit einem OR.
sucht man aber nach allen zeilen in tab2, die 'name' ausgeführt hat,
wirds kompliziert. bzw. weiß ich nicht weiter, weil ja tab1id in name
aufgelöst werden muss.
Mach halt einen Join, der dir die notwendigen Daten dazuholt. Wo genau liegt
gerade dein Problem?
Übrigens, überlege dir, ob du wirklich mit einem LIKE "%wort%" arbeiten
willst. Das führt zwangsläufig zu einem full table scan. Das bedeutet, dass
die Datenbank in jedem Fall zwingend jeden Datensatz auf diese Bedingung
hin überprüfen muss. Wenn du mit einem LIKE "wort%" arbeiten kannst, oder
auch mit einem Fulltext-Index, dann müssen uU nur noch [latex]\log_2n[/latex]
Datensätze (wobei n für die Anzahl der Datensätze steht) überprüft werden.
再见,
克里斯蒂安
moin!
Du Joinst die notwendigen Tabellen zusammen (z. B. über LEFT JOIN) und
verknüpfst die Vergleiche für jedes Feld mit einem OR.
danke christian!
stand wieder direkt vor dem wald und hab ihn nicht gesehen. in meinem fall geht das ziemlich simpel zu lösen:
SELECT tab1.name, tab2.xy FROM tab1 left join tab2 on tab1.is = tab2.tab1id where tab1.name like '%search%'
Übrigens, überlege dir, ob du wirklich mit einem LIKE "%wort%" arbeiten
willst. Das führt zwangsläufig zu einem full table scan.
yop, war auch nur zur veranschaulichung.
gruß.
roger.