Seite 1 von 2 12 Letzte
  1. #1
    Avatar von Devon
    Registriert seit
    18.11.2011
    Beiträge
    2.188
    Thanked 1.574 Times in 1.023 Posts

    Standard 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
    Im Internet selbst hab ich darüber schon viel gelesen, werde da allerdings nicht wirklich schlau daraus. Gibt halt viele Lösungsvorschläge. Vielleicht hat ja hier jemand eine Idee.

    Grüße

  2. #2
    Avatar von Ta1lor
    Registriert seit
    15.11.2011
    Beiträge
    767
    Thanked 832 Times in 435 Posts

    Standard AW: Mehrere MySQL Tabellen durchsuchen

    kannst du mal ein desc der Tabellen geben?

  3. #3
    Avatar von The Dope Show
    Registriert seit
    16.12.2013
    Beiträge
    111
    Thanked 193 Times in 24 Posts

    Standard 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

  4. #4
    Avatar von Devon
    Registriert seit
    18.11.2011
    Beiträge
    2.188
    Thanked 1.574 Times in 1.023 Posts

    Standard 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
    Das ist möglich. Könnte besser sein. Hab gelesen das man die Daten auch mit jQuery "filtern" bzw. halt durchsuchen könnte. Ist das für mein Vorhaben ratsam?

  5. #5
    Avatar von DMW007
    Registriert seit
    15.11.2011
    Beiträge
    6.142
    Thanked 9.130 Times in 3.005 Posts
    Blog Entries
    5

    Standard AW: Mehrere MySQL Tabellen durchsuchen

    Zitat Zitat von Devon Beitrag anzeigen
    Ist das für mein Vorhaben ratsam?
    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.


  6. #6

    Registriert seit
    02.01.2013
    Beiträge
    879
    Thanked 458 Times in 313 Posts

    Standard AW: 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)

  7. #7

    Registriert seit
    17.07.2014
    Beiträge
    50
    Thanked 26 Times in 16 Posts

    Standard AW: 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)

  8. #8

    Registriert seit
    02.01.2013
    Beiträge
    879
    Thanked 458 Times in 313 Posts

    Standard AW: 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)

  9. #9
    Avatar von Devon
    Registriert seit
    18.11.2011
    Beiträge
    2.188
    Thanked 1.574 Times in 1.023 Posts

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

  10. #10

    Registriert seit
    17.07.2014
    Beiträge
    50
    Thanked 26 Times in 16 Posts

    Standard AW: Mehrere MySQL Tabellen durchsuchen

    Warum nicht alle Waffen in einer Tabelle?

  11. The Following User Says Thank You to BeTwo For This Useful Post:

    John Gotti (21.07.2014)

Seite 1 von 2 12 Letzte

Ähnliche Themen

  1. SQL-Statement Tabellen joinen
    Von Saad im Forum Webentwicklung
    Antworten: 7
    Letzter Beitrag: 18.04.2014, 09:48
  2. Antworten: 8
    Letzter Beitrag: 22.03.2014, 22:57
  3. [HTML Tutorial] #5 - Tabellen
    Von Comu im Forum HTML
    Antworten: 0
    Letzter Beitrag: 26.07.2012, 17:39
  4. Dürfen Polizisten meine Tasche durchsuchen?
    Von Swifty im Forum RealLife
    Antworten: 14
    Letzter Beitrag: 27.01.2012, 22:10
Diese Seite nutzt Cookies, um das Nutzererlebnis zu verbessern. Klicken Sie hier, um das Cookie-Tracking zu deaktivieren.