John Gotti (21.07.2014)
-
15.07.2014, 13:32 #1
Mehrere MySQL Tabellen durchsuchen
Hallo!
Folgendes Problem: Ich hab in einer Datenbank 7 Tabellen die ich gern mit einem Formular durchsuchen möchte. Das Ganze soll innerhalb des Woltlab Burning Boards funktionieren und die Spalte "name" in den Tabellen ansprechen. Meine SQL Abfrage sieht wie folgt aus:
SELECT * FROM wcf1_test1, wcf1_test2, wcf1_test3, wcf1_test4, wcf1_test5, wcf1_test6, wcf1_test7 WHERE name LIKE suchbegriff;
Wenn ich diese testweise in der Datenbank ausführen möchte bekomme ich folgenden Fehler:
Column 'name' in where clause is ambiguous
Grüße
-
15.07.2014, 13:40 #2
AW: Mehrere MySQL Tabellen durchsuchen
kannst du mal ein desc der Tabellen geben?
-
15.07.2014, 13:44 #3
AW: Mehrere MySQL Tabellen durchsuchen
Die Meldung sagt doch schon wo das Problem ist: Die name-Spalte ist nicht eindeutig.
Ohne weitere Infos würd ich sagen so:
select columns
from tbl1, tbl2, tbl3 [...]
where tb1.name like "%suchbegriff%"
or tb2.name like "%suchbegriff%"
or tb3.name like "%suchbegriff%"
[...]
Aber wenn so was nötig ist würde ich mich immer fragen ob ich richtig an die Sache rangehe und die Tabellenstruktur nicht vielleicht doch Müll ist
-
19.07.2014, 19:42 #4
AW: Mehrere MySQL Tabellen durchsuchen
Aber wenn so was nötig ist würde ich mich immer fragen ob ich richtig an die Sache rangehe und die Tabellenstruktur nicht vielleicht doch Müll ist
-
19.07.2014, 21:07 #5
- Registriert seit
- 15.11.2011
- Beiträge
- 6.142
- Blog Entries
- 5
Thanked 9.130 Times in 3.005 PostsAW: Mehrere MySQL Tabellen durchsuchen
Kann ich nicht sagen, keine Ahnung was du da für Daten hast.
Meistens erzeugt so was aber unnötigen Overhead, weil eben mehr Daten geholt werden als nötig => Die Seite wird größer und es liegt generell mehr Last auf dem gesamten System, da das Backend (PHP nehm ich bei WBB mal an) den unnötigen Kram ebenfalls verarbeiten muss. Das zieht sich eben bis zum User hin. Sehe aber auch keinen Grund wieso man jQuery bzw. generell JS dafür nutzen sollte. So was kann der Datenbankserver in der Regel am besten, also lässt man den das auch machen.
-
20.07.2014, 10:29 #6
- Registriert seit
- 02.01.2013
- Beiträge
- 879
Thanked 458 Times in 313 PostsAW: Mehrere MySQL Tabellen durchsuchen
Hier ist die Herangehensweise und damit das SQL völlig falsch. Gibt man mehrere Tabellen in der FROM-Klausel an, dann muß es ein Join-Kriterium geben, sonst kriegt man zu viele Treffer. Für das, was Du vermutlich machen willst, muß die SQL ganz anders aussehen, nämlich mußt Du immer nur eine Tabelle durchsuchen. Dann fügst Du die Resultate zusammen. Das geht entweder über Programmlogik, oder Du kannst es im SQL selber über ein UNION machen. Das sieht dann so aus:
SELECT * FROM wcf1_test1 WHERE name LIKE suchbegriff UNION
SELECT * FROM wcf1_test2 WHERE name LIKE suchbegriff UNION
SELECT * FROM wcf1_test3 WHERE name LIKE suchbegriff UNION
SELECT * FROM wcf1_test4 WHERE name LIKE suchbegriff UNION
SELECT * FROM wcf1_test5 WHERE name LIKE suchbegriff UNION
SELECT * FROM wcf1_test6 WHERE name LIKE suchbegriff UNION
SELECT * FROM wcf1_test7 WHERE name LIKE suchbegriff;
Das funktioniert aber nur, wenn die Tabellen alle die gleichen Felder haben, in der gleichen Reihenfolge. Ist das nicht der Fall, dann mußt Du statt * eben die Feldnamen angeben, die in den Tabellen die gleichen sind, und die Feldnamen weglassen, die sich bei den Tabellen unterscheiden.
Meine Vermutung ist, daß schon das Tabellendesign irgendwo bei Dir nicht stimmt. Üblicherweise ist eine Regel beim Datenbankdesign: Gleiche Sachverhalte in EINER Tabelle speichern. Gleiche Dinge auf mehrere Tabellen zu verteilen ist nicht sinnvoll. Wenn die Dinge nur ungefähr gleich sind, d.h. viele gemeinsame Felder haben, aber auch einige unterschiedliche, macht man dennoch dann eine Haupttabelle, die die gleichen Felder haben, sowie dann 7 Untertabellen, die die Felder enthalten, in denen sich die Tabellen unterscheiden, plus Key als Join-Kriterium auf die Haupttabelle. Dann brauchst Du den ganzen UNION-Murks nicht und brauchst nur die Haupttabelle zu durchsuchen, wenn sie "name" enthält, was sie offensichtlich tun wird, da name ja in allen Deinen Tabellen vorhanden ist.
Mehr kann ich dazu erst sagen, wenn ich wüsste, worum es inhaltlich geht.Geändert von freulein (20.07.2014 um 10:32 Uhr)
-
20.07.2014, 11:07 #7
- Registriert seit
- 17.07.2014
- Beiträge
- 50
Thanked 26 Times in 16 PostsAW: Mehrere MySQL Tabellen durchsuchen
Die Version die oben genannt wurde ist bereits die implizite UNION Abfrage. Dem Rest des Posts stimme ich zu.
Wenn der TE mal genau erklären würde was für Tabellen das sind und was er da eigentlichen suchen will, dann kann man das bestimmt besser nachvollziehen.Geändert von BeTwo (20.07.2014 um 11:08 Uhr)
-
20.07.2014, 11:30 #8
- Registriert seit
- 02.01.2013
- Beiträge
- 879
Thanked 458 Times in 313 PostsAW: Mehrere MySQL Tabellen durchsuchen
@BeTwo,
nein, das Select weiter oben ergibt eine ganz andere Ergebnismenge.
Nehmen wir an, wir haben zwei identische Tabellen mit den Feldern "name" und "zahl" und mit folgendem Inhalt:
Tabelle 1:
maxe, 5
minna,3
Tabelle 2:
maxe, 13
hansi, 4
Dann ergibt:
Select * from tabelle1, tabelle2 where tabelle1.name = 'maxe' or tabelle2.name = 'maxe';
folgende 3 Ergebnisse:
maxe, 5, maxe, 13
maxe, 5, hansi, 4
minna, 3, maxe, 13
Ich denke, das ist nicht erwünscht. Wenn man mehrere Tabellen ohne Join-Kriterium angibt, erhält man immer so eine Art kartesisches Produkt... was wohl kaum mal beabsichtigt sein dürfte.
Select * from Tabelle1 where name = 'maxe' UNION
Select * from Tabelle2 where name = 'maxe';
ergibt:
maxe, 5
maxe, 13
Ich denke, das ist wohl eher das gewünschte Ergebnis.Geändert von freulein (20.07.2014 um 11:31 Uhr)
-
21.07.2014, 10:49 #9
AW: Mehrere MySQL Tabellen durchsuchen
Die Tabellen sind identisch, also von der Struktur her. Sehen alle wie die folgende aus:
Mit den Tabellen will ich eine Statistik zu einem Spiel aufbauen welche Details über Waffen ausgibt. Deswegen will ich auch diese Tabellen durchsuchen bzw. filtern lassen. Durchsucht werden soll eigentlich nur der Name des jeweiligen Eintrages. Später eventuell auch mehr, aber das steht auf einem anderen Blatt. Wenn noch weitere Infos benötigt werden so meldet euch.
-
21.07.2014, 11:23 #10
- Registriert seit
- 17.07.2014
- Beiträge
- 50
Thanked 26 Times in 16 PostsAW: Mehrere MySQL Tabellen durchsuchen
Warum nicht alle Waffen in einer Tabelle?
-
The Following User Says Thank You to BeTwo For This Useful Post:
Ähnliche Themen
-
SQL-Statement Tabellen joinen
Von Saad im Forum WebentwicklungAntworten: 7Letzter Beitrag: 18.04.2014, 09:48 -
Xampp Service mysql is not installed Service mysql is not started
Von Essah im Forum WebentwicklungAntworten: 8Letzter Beitrag: 22.03.2014, 22:57 -
[HTML Tutorial] #5 - Tabellen
Von Comu im Forum HTMLAntworten: 0Letzter Beitrag: 26.07.2012, 17:39 -
Dürfen Polizisten meine Tasche durchsuchen?
Von Swifty im Forum RealLifeAntworten: 14Letzter Beitrag: 27.01.2012, 22:10
Diese Seite nutzt Cookies, um das Nutzererlebnis zu verbessern. Klicken Sie hier, um das Cookie-Tracking zu deaktivieren.