Ankündigung

Einklappen
Keine Ankündigung bisher.

aus tabelle mit mehreren identischen ds nur ein ergebniss abfragen ?

Einklappen

Neue Werbung 2019

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

  • aus tabelle mit mehreren identischen ds nur ein ergebniss abfragen ?

    Moin

    ich glaub der titel ist nicht aussagekräftig!

    Also mein Problem sieht wie folgt aus:
    Ich habe eine tabelle "produkte" mit folgenden Spalten:
    ID|pro_nr|kat|serie|name|preis etc....

    In dieser tabelle sind insgesamt 217Produkte drin. Davon 12 produkte die alle kat="gebrauchskeramik" und serie="playa" stehen haben. Dann noch welche die kat="gebrauchskeramik" und serie="terra" und auch noch eine weitere Serie(mar) gibt es

    Nun möchte ich ein dynamisches Menü erstellen, wo unter Gebrauchskeramik nur einmal "playa", "mar" und "terra" erscheint.

    Es wäre einfach, wenn man wüsste, bei den 3 Serien bliebe es, aber es soll erweiterbar sein.

    Wie muss denn die Select-abfrage aussehen!
    ZZ. hab ich das stehen, was mir aber alle auflistet wo in der spalte kat "Gebrauchskeramik" drin steht.

    PHP-Code:
    $sql='SELECT * FROM produkte WHERE kat="Gebrauchskeramik" ORDER BY id'
           
    $result=mysql_query($sql) OR die(mysql_error());
               if (
    mysql_Num_Rows($result) > ) {
                 
                   while (
    $row mysql_fetch_array ($result)) { 
                      echo 
    '<li><a href="produkte.php?kat=Gebrauchskeramik&serie='.$row['serie'].'">'.$row['serie'].'</a></li>';
                   }
                   echo 
    "</ul>";
              } 
    Gibt es vielleicht auch die Möglichkeit alle verschiedene Eintrage in der Spalte serie aufzulisten? heisst, dass obwohl mehrer Datensätze den gleichen eintrag haben, dies nur einmal erscheint?

    Denn dann könnte man dies ja mit einer zusätzlichen WHERE kat="Gebrauchskeramik" erzielen (Denk ich zumindest)

    über Hilfe wäre ich dankbar

    zdek

  • #2
    Zitat von zdek Beitrag anzeigen
    Moin

    ich glaub der titel ist nicht aussagekräftig!

    Also mein Problem sieht wie folgt aus:
    Ich habe eine tabelle "produkte" mit folgenden Spalten:
    ID|pro_nr|kat|serie|name|preis etc....

    In dieser tabelle sind insgesamt 217Produkte drin. Davon 12 produkte die alle kat="gebrauchskeramik" und serie="playa" stehen haben. Dann noch welche die kat="gebrauchskeramik" und serie="terra" und auch noch eine weitere Serie(mar) gibt es

    Nun möchte ich ein dynamisches Menü erstellen, wo unter Gebrauchskeramik nur einmal "playa", "mar" und "terra" erscheint.

    Es wäre einfach, wenn man wüsste, bei den 3 Serien bliebe es, aber es soll erweiterbar sein.

    Wie muss denn die Select-abfrage aussehen!
    ZZ. hab ich das stehen, was mir aber alle auflistet wo in der spalte kat "Gebrauchskeramik" drin steht.

    PHP-Code:
    $sql='SELECT * FROM produkte WHERE kat="Gebrauchskeramik" ORDER BY id'
           
    $result=mysql_query($sql) OR die(mysql_error());
               if (
    mysql_Num_Rows($result) > ) {
                 
                   while (
    $row mysql_fetch_array ($result)) { 
                      echo 
    '<li><a href="produkte.php?kat=Gebrauchskeramik&serie='.$row['serie'].'">'.$row['serie'].'</a></li>';
                   }
                   echo 
    "</ul>";
              } 
    Gibt es vielleicht auch die Möglichkeit alle verschiedene Eintrage in der Spalte serie aufzulisten? heisst, dass obwohl mehrer Datensätze den gleichen eintrag haben, dies nur einmal erscheint?

    Denn dann könnte man dies ja mit einer zusätzlichen WHERE kat="Gebrauchskeramik" erzielen (Denk ich zumindest)

    über Hilfe wäre ich dankbar

    zdek

    Wie üblich gibt es dafür viele Wege, z.B. über DISTINCT ON:
    Du solltest noch definieren, WELCHEN Eintrag Du haben willst. Hier für den teuersten und den billigsten Eintrag:


    Code:
    test=*# select * from zdek;
     id |   kat   | serie | preis
    ----+---------+-------+-------
      1 | keramik | terra |    10
      2 | keramik | terra |    12
      3 | keramik | playa |    20
      4 | keramik | playa |    15
      5 | keramik | mar   |   100
      6 | keramik | mar   |    50
    (6 rows)
    
    Time: 0,181 ms
    test=*# select distinct on (kat, serie) kat, serie, preis, id from zdek order by kat, serie, preis desc;
       kat   | serie | preis | id
    ---------+-------+-------+----
     keramik | mar   |   100 |  5
     keramik | playa |    20 |  3
     keramik | terra |    12 |  2
    (3 rows)
    
    Time: 0,264 ms
    test=*# select distinct on (kat, serie) kat, serie, preis, id from zdek order by kat, serie, preis asc;
       kat   | serie | preis | id
    ---------+-------+-------+----
     keramik | mar   |    50 |  6
     keramik | playa |    15 |  4
     keramik | terra |    10 |  1
    (3 rows)

    Andreas
    PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services

    Kommentar


    • #3
      Ja Super, das ist es .
      PHP-Code:
      SELECT distinct katserie  FROM produkte WHERE kat="Gebrauchskeramik" ORDER BY id 
      Damit hab ich mein problem gelöst. da ich es nur für ein Menü benötige, ist es mit billigsten und teuersten unwichtig.

      Danke danke
      lorenz

      Kommentar

      Lädt...
      X