Ankündigung

Einklappen
Keine Ankündigung bisher.

Select Abfrage mit Inner Join doppelte Ergebnisse

Einklappen

Neue Werbung 2019

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

  • Select Abfrage mit Inner Join doppelte Ergebnisse

    Hallo zusammen,

    ich habe eine Kundenadressen Tabelle und eine Kategorien Tabelle und eine Zuordnungstabelle. Ich übergebe diese Daten an ein Suchfeld.

    Code:
     SELECT concat('/kundenadressen/index/', kundenadressen.kdnAdId) As id,  concat('Adresse: ',t.name, kundenadressen.vorname,' ', kundenadressen.name , ' ', kundenadressen.ort, ' ', kundenadressen.firmenName) As name, '2037-01-01' As date
                    FROM kundenadressen
                        INNER JOIN kategorie_kundenadresse AS I ON (I.adressenID = kundenadressen.kdnAdID)
                        INNER JOIN kategorien AS t ON (I.kategorieID = t.katId)
                    Where kundenadressen.firmenId = '".$user['companyId']."
    AND CONCAT('Adresse', t.name,kundenadressen.firmenName,kundenadressen.vorname,kundenadressen.name,kundenadressen.ort) LIKE '%" . $searchArray[0] . "%'
    Wenn ich t.name (fett) markiert eintrage, bekomme ich beim Ergebnis zweimal die gleiche Adresse nur mit unterschliedlichen Kategorienamen, Wenn ich t.name rausnehme erscheint nur noch die einzelne Adresse.

    Wie kann ich es so gestalten dass ich alle Kategorien in As name erscheinen mit der einen Adresse ?

    über einen Tipp wäre ich dankbar.




  • #2
    Du Gruppierst nach dem Primärschlüssel der Adresse und kannst dir dann mit GROUP_CONCAT(t.name) alle Kategorien für diese Adresse holen.

    Nebenbei, bei deinem jetzigen Query macht es kein Unterscheid ob du t.name im SELECT hast oder nicht. Du bekommst die Adresse so oder so doppelt.

    Kommentar


    • #3
      Zitat von JAssfalg Beitrag anzeigen
      Hallo zusammen,

      ich habe eine Kundenadressen Tabelle und eine Kategorien Tabelle und eine Zuordnungstabelle. Ich übergebe diese Daten an ein Suchfeld....
      Wie kann ich es so gestalten dass ich alle Kategorien in As name erscheinen mit der einen Adresse ?

      über einen Tipp wäre ich dankbar.


      firmenId und firmenName in der Tabelle kundenadressen scheint erstmal ein Normalisierungs-Verstoß zu sein. Kann man aber so nicht sagen. Stelle bitte einen Dump mit allen relevanten Tabellen (scheinbar 3) und Testdaten zur Verfügung!

      Kommentar


      • #4
        die firmenId dient nur zur unterscheidung der verschiedenen Firmen die auf der Datenbank arbeiten.

        Tabelle Kategorien

        Screenshot_2019-03-08 phpMyAdmin db672937484 kategorien.png

        Zuordnungstabellekategorie_kundenadresse

        Screenshot_2019-03-08 phpMyAdmin db672937484 kategorie_kundenadresse.png

        Tabelle kundenadressen

        Screenshot_2019-03-08 phpMyAdmin db672937484 kundenadressen.png

        HIer die Abfrage nochmals ohne firmenId da diese nicht relevant ist

        Code:
            SELECT concat('/kundenadressen/index/', kundenadressen.kdnAdId) As id,  concat('Adresse: ', t.name,' ', kundenadressen.vorname,' ', kundenadressen.name , ' ', kundenadressen.ort, ' ', kundenadressen.firmenName) As name, '2037-01-01' As date
                        FROM kundenadressen
                            INNER JOIN kategorie_kundenadresse AS I ON (I.adressenID = kundenadressen.kdnAdID)
                            INNER JOIN kategorien AS t ON (I.kategorieID = t.katId)
                        Where CONCAT('Adresse', t.name,kundenadressen.firmenName,kundenadressen.vorname,kundenadressen.name,kundenadressen.ort) LIKE '%" . $search . "%'
        Wie kann ich hier das group by einfügen oder ist die abfrage falsch ?

        Wenn ich t.name einfügen erscheinen zwei Suchergebnisse da die Person in zwei Kategorien ist. Wenn ich t.name wieder lösche erscheint nur ein Suchergebnis aber halt ohne die Kategorie Bezeichnungen.

        vielen lieben Dank schon mal

        Kommentar


        • #5
          Das ist kein SQL Dump!
          Man sieht aber so schon das die DB nicht utf8-fähig ist und die Struktur und deren Typauswahl nicht durchdacht wurde.
          Warum kdnADId, wenn das der PK ist, und nicht nur id, selbiges für katId.
          Wofür steht color?
          Was ist name?
          Warum firmenName auf einmal als CamelCase-Schreibweise?
          Warum hast du bei PLZ 10 Stellen und bei Bundesland nur 10 Stellen, was ist mit Baden-Würtemberg, wie stellst du das in der DB dar?

          Kommentar


          • #6
            Hallo zusammen,
            ich glaube ich habs. Sicher nicht elegant aber funktioniert.

            Code:
            SELECT kundenadressen.kdnAdId AS id,  
                   kundenadressen.name,      
                   (SELECT GROUP_CONCAT(DISTINCT kategorien.name) FROM kategorien,  kategorie_kundenadresse
                    WHERE kategorie_kundenadresse.adressenID = id
                    AND kategorie_kundenadresse.kategorieID = kategorien.katId
                   ) AS test
            FROM kundenadressen
            WHERE kundenadressen.firmenId = '1'
            AND kundenadressen.name LIKE '%Assfalg%'
            Angehängte Dateien

            Kommentar

            Lädt...
            X