PHP Suche in Datenbank mehrere Einträge

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • PHP Suche in Datenbank mehrere Einträge

    Guten Abend

    ich weiss nicht wie ich den Titel am einfachsten benennen soll. Ich habe folgende zwei Datenbanken:

    db1:
    ID | Nummer | Farbe
    1 | 100000 | Blau
    2 | 100001 | Grün
    3 | 100002 | Rot

    db2
    ID | IDDB1 | NummerDB2 | Name
    1 | 1 | X101 | Hans
    2 | 1 | X102 | Peter
    3 | 3 | X103 | Tom

    Nun habe ich folgende MySQL Abfrage:
    SELECT db1.*, db2.* FROM db1 db1
    LEFT JOIN db2 db3 ON (db1.ID=db2.IDDB1)
    WHERE db1.ID="'.intval($_REQUEST['ID']).'"

    Nun ist es so, dass ich durch das LEFT JOIN noch alle Wertde auslesen kann aus db2. Jedoch soll er mir die Einträge aus db1 einmal anzeigen. Er zeigt mir jedoch den Eintrag mit der ID1 doppelt an, da in der db2 zwei Einträge mit der IDDB1 sind. Kann ich das irgendwie verhindern?

    Dachte erst CONCAT könnte passen aber CONCAT(db1.*) gibt ein fehler, und CONCAT(db1.ID), db1.*, db2.* führt auch nicht zum ergebnis. Es gab da eine Funktion aber ob es concat war...?

    Was mach ich da falsch?

    SORRY Group BY ist die Lösung
    . Was war den Concate?

    Gruss

    Koda
    Zuletzt geändert von Koda; 27.05.2013, 19:17.

  • #2
    item: Es sind nicht 2 Datenbanken sondern 2 Tabellen innerhalb einer Datenbank

    item: Dein SQL kann so nicht funktionieren. Du gibst der Tabelle db2 den Alias db3. Ab Da heisst die Tabelle db3 innerhalb des SQL-Srings. Aber du greifst weiterhin auf db2 zu. Das müsste zu einem Fehler führen

    item: CONCAT() verbindet Strings miteinander. Bei Unsicherheiten einfach mal nach 'mysql concat' googeln. Da wird man sehr schnell fündig.
    item: Ich habe es mir aus gesundheitlichen Gründen abgewöhnt unformatierten Code zu lesen (Auch SQL-Statements kann man formatieren!)

    Kommentar


    • #3
      Hi

      Nun muss ich das Thema nochmals auffassen.

      Mit db3 habe ich mich verschrieben sorry.

      So Funktioniert es:
      SELECT db1.*, db2.* FROM db1 db1
      LEFT JOIN db2 db2 ON (db1.ID=db2.IDDB1)
      WHERE db1.ID="'.intval($_REQUEST['ID']).'"
      GROUP BY db1.ID
      Gar kein Problem.

      Aber irgendwie verstehe ich folgendes nicht:
      Wenn ich diese Abfrage mache:
      SELECT COUNT(ID) as count FROM db1 LIMIT 1 bekomme ich als ergebniss die Zahl ALLER Einträge und ich erhalte EINe Resultatszeile selbst ohne LIMIT 1

      Wenn ich aber dies mache:
      SELECT COUNT(*) as count FROM db1 db1
      LEFT JOIN db2 db2 ON (db1.ID=db2.IDDB1)
      WHERE db1.ID="'.intval($_REQUEST['ID']).'"
      GROUP BY db1.ID
      (Aber auch ohne das Group) erhalte ich eine Auflistung aller Einträge, und mit LIMIT 1 nur ein Eintrag. Gibt es keine Möglichkeit damit mit das COUNT im ersten eintrag die Menge angibt?

      Gruss und Danke

      koda

      Kommentar


      • #4
        Zitat von Koda Beitrag anzeigen
        Aber irgendwie verstehe ich folgendes nicht:
        Wenn ich diese Abfrage mache:
        SELECT COUNT(ID) as count FROM db1 LIMIT 1 bekomme ich als ergebniss die Zahl ALLER Einträge und ich erhalte EINe Resultatszeile selbst ohne LIMIT 1
        Jepp. Das ist logisch. Der SELECT COUNT(*) FROM macht automatisch ein GROUP BY auf NIX. Das ergibt eine Zeile mit der Summe drin. Davon machst du LIMIT 1. Nimmst also die Erste und einzige Zeile.

        Zitat von Koda Beitrag anzeigen
        Wenn ich aber dies mache:
        SELECT COUNT(*) as count FROM db1 db1
        LEFT JOIN db2 db2 ON (db1.ID=db2.IDDB1)
        WHERE db1.ID="'.intval($_REQUEST['ID']).'"
        GROUP BY db1.ID
        (Aber auch ohne das Group) erhalte ich eine Auflistung aller Einträge, und mit LIMIT 1 nur ein Eintrag. Gibt es keine Möglichkeit damit mit das COUNT im ersten eintrag die Menge angibt?
        Ich verstehe nicht was du willst
        item: Ich habe es mir aus gesundheitlichen Gründen abgewöhnt unformatierten Code zu lesen (Auch SQL-Statements kann man formatieren!)

        Kommentar


        • #5
          Hi

          Vielen Dank für deine Antwort.

          Eigentlich das selbe wie im ersten Beispiel. Wie du ja sagst bekomme ich genau ein Ergebnis mit der Menge was perfekt ist.

          Nun möchte ich gerne genau das selbe mit meiner Abfrage:
          SELECT COUNT(*) as count FROM db1 db1
          LEFT JOIN db2 db2 ON (db1.ID=db2.IDDB1)
          WHERE db1.ID="'.intval($_REQUEST['ID']).'"
          GROUP BY db1.ID
          Aber ich erhalte hier nicht ein ergebnis mit count, sondern er gibt mir mehrere Zeilen mit "Teilergebnissen". Bekomme ich überhaupt das gesamtergebnis in der SELECT ohne mysql_num_rows zu verwenden?

          Der Hintergrund: Vor längerer Zeit habe ich mal irgendwo gelesen das num_rows datenbanklastiger ist als ein COUNT(). Ich weiss aber nicht ob das stimmt.

          Gruss

          Koda
          Zuletzt geändert von Koda; 29.05.2013, 20:09.

          Kommentar


          • #6
            item: Nebenbei, warum nmachs du ein intval() wenn du nachher ein String-Vergleich durchführst? Im WHERE bei der ID solltest du die " weglassen. Die ID wird ja hoffentlich eine Zahl und kein String sein
            Code:
            //du hast
            WHERE db1.ID="13"
            //besser ist
            WHERE db1.ID=13
            item: Was willst du eigentlich Zählen? Du solltest dich beim * auf die Tabelle beschränken die du auch auszählen willst. Der LEFT-JOIN auf die Tabelle db2 irgendwie gar kein Sinn ausser du willst die EInträge in db2 Zählen
            item: Ich habe es mir aus gesundheitlichen Gründen abgewöhnt unformatierten Code zu lesen (Auch SQL-Statements kann man formatieren!)

            Kommentar


            • #7
              Da wird man sehr schnell fündig.http://www.meinwowgold.de

              Kommentar

              Lädt...
              X