Ankündigung

Einklappen
Keine Ankündigung bisher.

[Erledigt] MySQL Abfrage Ohne Dubletten

Einklappen

Neue Werbung 2019

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

  • [Erledigt] MySQL Abfrage Ohne Dubletten

    Hallo,

    ich habe folgende Spalte in der DB:

    Spalte
    1 / 2 / 3
    1 / 2 / 3
    1 / 2 / 4
    1 / 2 / 3
    1 / 3 / 1
    1 / 3 / 1
    1 / 4 / 5

    Nun möchte ich alles vor dem ersten "/" ausgeben aber ohne doppelte Abfrage.
    Sprich es soll einfach nur "1" ausgegeben werden.

    Habe es mit DISTINCT und strtok() wie folgt versucht:

    PHP-Code:
    $abfrage22 "SELECT DISTINCT MerchantProductCategory FROM shop ORDER BY MerchantProductCategory";

    $db_erg22 mysql_query$abfrage22 ) or die(mysql_error());

    while (
    $zeile22 mysql_fetch_array$db_erg22MYSQL_ASSOC))
    {

            
    $erster_token  strtok($zeile22['MerchantProductCategory'], '/');
            
    $zweiter_token strtok('/');
            
    $dritter_token strtok('/');

            echo 
    $erster_token."<br>";


    Da ich das strtok() allerdings erst innerhalb der Abfrage durchführe ist für Ihn das DISTINCT auf die komplette Zeile der Spalte anzusehen (und nicht wie gewünscht auf das strtok().

    Demnach gibt er folgendes aus:

    1 / 2 / 3
    1 / 2 / 4
    1 / 3 / 1
    1 / 4 / 5

    Ich weiß jetzt nicht wie ich das einbinden kann, dass nur "1" ausgegeben wird - hat jemand Rat?!


  • #2
    Code:
    SELECT DISTINCT SUBSTRING_INDEX(MerchantProductCategory, '/', 1) AS alles_vor_dem_ersten_slash
    Du könntest dich auch mal in Datenbanknormalisierung einlesen.

    Kommentar


    • #3
      Zitat von hts Beitrag anzeigen
      Code:
      SELECT DISTINCT SUBSTRING_INDEX(MerchantProductCategory, '/', 1) AS alles_vor_dem_ersten_slash
      Du könntest dich auch mal in Datenbanknormalisierung einlesen.
      Ich habe es nun so umgesetzt:

      PHP-Code:
      $abfrage22 "SELECT DISTINCT SUBSTRING_INDEX(MerchantProductCategory, '/', 1) FROM shop ORDER BY MerchantProductCategory";

      $db_erg22 mysql_query$abfrage22 ) or die(mysql_error());

      while (
      $zeile22 mysql_fetch_array$db_erg22MYSQL_ASSOC))
      {


              echo 
      $zeile22['MerchantProductCategory']."<br>";


      Allerdings gibt er nichts aus und mir folgenden Hinweis für jeden Eintrag:
      Notice: Undefined index: MerchantProductCategory in /var/www/www/kunden/10507/dein-geschenk-tisch.de/html/mb/shop_mb2.php on line 89

      Kann es daran liegen, dass manche Zeilen in der Spalte leer sind - eigentlich nicht oder?

      Hast du nen guten Link für Datenbanknormalisierung - werde es bei der nächsten Herausforderung berücksichtigen aber bitte hilf mir noch kurz bei diesem Ding hier. So schwer kann es ja eigentlich nicht sein?!

      Kommentar


      • #4
        Zitat von Rutor Beitrag anzeigen
        Kann es daran liegen, dass manche Zeilen in der Spalte leer sind - eigentlich nicht oder?
        Es liegt daran das die Spalte in dienem Select nicht aufgeführt ist.
        "Alles im Universum funktioniert, wenn du nur weißt wie du es anwenden musst".

        Kommentar


        • #5
          Zitat von Rutor Beitrag anzeigen
          Allerdings gibt er nichts aus und mir folgenden Hinweis für jeden Eintrag:
          Notice: Undefined index: MerchantProductCategory in /var/www/www/kunden/10507/dein-geschenk-tisch.de/html/mb/shop_mb2.php on line 89

          Kann es daran liegen, dass manche Zeilen in der Spalte leer sind - eigentlich nicht oder?
          Nein, das ist ein PHP-Fehler, der dir sagt, dass der Index "MerchantProductCategory" im Ergebnis-Array nicht existiert und das liegt daran, dass du in deiner Abfrage keinen ALIAS benutzt.

          Zitat von Rutor Beitrag anzeigen
          Hast du nen guten Link für Datenbanknormalisierung - werde es bei der nächsten Herausforderung berücksichtigen aber bitte hilf mir noch kurz bei diesem Ding hier. So schwer kann es ja eigentlich nicht sein?!
          Nö, aber Wikipedia und Google sind immer ein richtiger Einstiegspunkt

          Kommentar


          • #6
            Zitat von Dark Guardian Beitrag anzeigen
            Es liegt daran das die Spalte in dienem Select nicht aufgeführt ist.
            Verstehe ich nicht - ist doch drin:

            $abfrage22 = "SELECT DISTINCT SUBSTRING_INDEX(MerchantProductCategory, '/', 1) FROM shop ORDER BY MerchantProductCategory";

            Oder muss ich das anders schreiben?

            Kommentar


            • #7
              Führe die Abfrage in PMA aus, dann siehst du, wie die Ergebnisspalte heißt.

              Kommentar


              • #8
                Zitat von hts Beitrag anzeigen
                Nein, das ist ein PHP-Fehler, der dir sagt, dass der Index "MerchantProductCategory" im Ergebnis-Array nicht existiert und das liegt daran, dass du in deiner Abfrage keinen ALIAS benutzt.
                Versteh ich nicht so ganz - Was für einen ALIAS denn? Ich will eine Variable Abfrage machen und nicht etwas angeben wonach er sucht oder steh ich grad auf dem schlauch?

                Kommentar


                • #9
                  Zitat von hts Beitrag anzeigen
                  Führe die Abfrage in PMA aus, dann siehst du, wie die Ergebnisspalte heißt.
                  Ähhh sorry - PMA ??

                  Kommentar


                  • #10
                    Zitat von Rutor Beitrag anzeigen
                    Ähhh sorry - PMA ??
                    PhpMyAdmin

                    Also nen Tool wo du so Abfragen vorher testen kannst, solltest du schon kennen...

                    Kommentar


                    • #11
                      Zitat von StefanRHRO Beitrag anzeigen
                      PhpMyAdmin

                      Also nen Tool wo du so Abfragen vorher testen kannst, solltest du schon kennen...
                      OK damit kann ich natürlich was anfangen - kannte nur die abkürzung nicht.

                      ALLERDINGS finde ich bei PMA keinen Operator der was mit SUBSTRING_INDEX zu tun hat um zu schauen wie ich die Abfrag formulieren muss?!

                      Kommentar


                      • #12
                        Zitat von Rutor Beitrag anzeigen
                        Verstehe ich nicht - ist doch drin:

                        $abfrage22 = "SELECT DISTINCT SUBSTRING_INDEX(MerchantProductCategory, '/', 1) FROM shop ORDER BY MerchantProductCategory";

                        Oder muss ich das anders schreiben?
                        Du übergibst die Spalte an eine Funktion.... das ist etwas völlig anderes.
                        "Alles im Universum funktioniert, wenn du nur weißt wie du es anwenden musst".

                        Kommentar


                        • #13
                          Ok habe Verstanden - muss es als WHERE einbinden:

                          $abfrage22 = "SELECT DISTINCT MerchantProductCategory FROM dtg_shop WHERE SUBSTRING_INDEX(MerchantProductCategory, '/', 1) ORDER BY MerchantProductCategory";

                          Allerdings gibt er mir bei weitem nicht alles wieder:

                          auffällig ist, dass er nur Daten wiedergibt, die mit zahlen beginnen aber keine die einfach strings sind!?

                          Kommentar


                          • #14
                            Zitat von Rutor Beitrag anzeigen
                            Ok habe Verstanden - muss es als WHERE einbinden:

                            $abfrage22 = "SELECT DISTINCT MerchantProductCategory FROM dtg_shop WHERE SUBSTRING_INDEX(MerchantProductCategory, '/', 1) ORDER BY MerchantProductCategory";

                            Allerdings gibt er mir bei weitem nicht alles wieder:

                            auffällig ist, dass er nur Daten wiedergibt, die mit zahlen beginnen aber keine die einfach strings sind!?
                            Nein du musst einen ALIAS für die Spalte vergeben.

                            Nach dem DISTINCT folgt eine Reihe von Spalten durch Kommata getrennt. Das können echte Spaltenbezeichner sein, Rückgabewerte von Funktionen oder sonstwas. Du musst dem Kram danach nur einen Namen geben damit du es verwenden kannst. Stichwort: function() AS columnname
                            "Alles im Universum funktioniert, wenn du nur weißt wie du es anwenden musst".

                            Kommentar


                            • #15
                              Zitat von Dark Guardian Beitrag anzeigen
                              Nein du musst einen ALIAS für die Spalte vergeben.

                              Nach dem DISTINCT folgt eine Reihe von Spalten durch Kommata getrennt. Das können echte Spaltenbezeichner sein, Rückgabewerte von Funktionen oder sonstwas. Du musst dem Kram danach nur einen Namen geben damit du es verwenden kannst. Stichwort: function() AS columnname
                              Das ist was ich im Moment benutze:

                              PHP-Code:
                              $abfrage22 "SELECT DISTINCT MerchantProductCategory FROM shop WHERE SUBSTRING_INDEX(MerchantProductCategory, '/', 1) ORDER BY MerchantProductCategory";

                              $db_erg22 mysql_query$abfrage22 ) or die(mysql_error());

                              while (
                              $zeile22 mysql_fetch_array$db_erg22MYSQL_ASSOC))
                              {
                                      echo 
                              $zeile22['MerchantProductCategory']."<br>";

                              Und es funktioniert auch - allerdings nur mit den zeilen welche mit Zahlen beginnen und nicht mit welchen die aus Buchstaben bestehen. Es werden sogar alle Zeilen der Spalte ausgegeben die mit Zahlen beginnen - kann doch nicht sein, dass es nur mit Zahlen und Buchstaben zu tun haben kann weil es ja alles Strings sind.

                              Kommentar

                              Lädt...
                              X