Zwei mySQL Tabellen abfragen

  • Guten Morgen,


    ich bin an einem Punkt angekommen, wo ich nicht weiter weiß. Vielleicht könnt ihr mir helfen. Es geht darum zwei Tabellen abzufragen NICHT zu verbinden. Im Netz habe ich folgende Schreibweise gefunden, die allerdings nicht geht:



    Ich möchte prüfen ob in der erste oder in der zweiten Tabelle die eingegeben Telefonnummer vorhanden ist. Habt ihr vielleicht eine Lösung? Wenn ich diesen Code ausführe, wie er oben steht, erhalte ich eine Fehlermeldung "Fatal error: Call to a member function bind_param() on a non-object "

  • Den Fehler

    Zitat

    Call to a member function bind_param() on a non-object

    bekommst Du, weil $stmt = $mysqli->prepare sichrlich fehlschlug.
    (Fehlermeldungen abfangen!)


    Zur Query:
    eine Möglichkeit:

    SQL
    SELECT 
      (SELECT COUNT(*) FROM `kunden` WHERE `kd_telefon` = ?) + 
      (SELECT COUNT(*) FROM `kunden_weitere_telefonnummern` WHERE `uwt_nummer` = ?) 
    AS `amount`;


    andere Möglichkeit:

    SQL
    -- EDIT: falsch! nicht nutzen!
    SELECT     
        COUNT(`a`.`kd_telefon`) AS `amount_a`,
        COUNT(`b`.`uwt_nummer`) AS `amount_b`
    FROM  `kunden` AS `a`
    LEFT JOIN `kunden_weitere_telefonnummern` AS `b` ON `a`.`kd_telefon` = `b`.`uwt_nummer` 
    WHERE 
        `a`.`kd_telefon` = ?
        OR `b`.`uwt_nummer` = ?;


    Warum hast Du egtl die Nummern in 2 Tabellen?
    Wenn Du "mehr Platz" für mehr Nummern brauchst, dann würde ich generell eine Extratabelle empfehlen.

  • Vielen Dank für deine Hilfe. Ich habe mich erstmal für deine erste Variante entschieden. Gibt es zwischen den beiden von dir vorgestellten Varianten irgendwelche Vor- bzw. Nachteile?


    Als ich meine Datenbank erstellt habe dachte ich noch nicht, dass sich das Projekt so entwickelt (Kundendatenbank). Erst wollte ich damit nur meinen sehr kleinen Kundenstamm pflegen, dann sind immer wieder Felder hinzugekommen (Handynummer, Fax, Bemerkung, Erinnerungen usw. Jetzt hatte ich das Problem, dass ein Kunde mehrere Nummern hat und ich nicht wegen jeder Nummer einen neuen Datensatz anlegen möchte. Deshalb habe ich einfach eine weitere Tabelle angelegt in der ich die weiteren Nummern speichere.


    Deine Idee alle Nummern auszulagern hört sich sehr gut an, das würde aber für mich bedeuten sämtliche Scripte umzuschreiben, das kann ich angehen wenn ich meine wichtigsten Änderungen abgeschlossen habe.

  • Vor-Nachteile -- kommt immer drauf an, wie Deine Tabellen aussehen.
    Einfach testen, ausprobieren, anpassen usw.
    Die schnellste Variante gewinnt dann =)


    Die Zweite allerdings ist etwas "schwierig". Kann zu falschen Ergebnissen führen.
    Und das ist mir hier sogar passiert :D
    Mit dem join bekommt man falsche Ergebnisse.
    Warum:
    zähle tbl a und zähle tbl b
    von tbl a
    left join tbl b


    kommt raus:
    wenn in tbl a NICHT gefunden,
    aber über tbl b,
    dann "bekommt" tbl a einen count up (also +1).


    Also nicht die 2te Variante nutzen =)

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!