Mark: Syntax für Select gesucht...

Hallo, ich muss mich mit einer suboptimalen Datenbankstruktur herumärgern, an der ich aber nichts ändern darf.
Folgendes Problem:
Es gibt in drei Spalten der DB Brancheneinträge, die ich alle auslesen muss um die anschließend in ein select-menü einzutragen.
Mit einer Spalte klappt das auch prima, ich vermerke in meiner do while-anweisung die Bezeichnung der letzten Branche und frage beim nächsten Durchlauf ab, ob es eine Übereinstimmung gibt. Falls nicht, wird der nächsten Datensatz ins select-menü eingetragen.
Da ich aber jetzt per select zwei weitere Branchen, die zum Teil dieselben Bezeichnungen wie die in anderen Zeilen haben können, weiß ich nicht, welches die beste Vorgehensweise dafür ist.
Bislang mache ich es ala:

$sql="select branche1 from tabelle1 order by branche1 asc";
$tabelle = mysql_query($sql, $verbindung) or die(mysql_error());
$branche_tabelle = mysql_fetch_assoc($tabelle);

in der do while-Anweisung gebe ich dann ja einfach, da bereits alphabetisch sortiert den Inhalt von $branche_tabelle['branche1'] aus.

Wie erfasse ich die anderen beiden branchen (branche2, branche3) so daß ich im query für die Ausgabe, z.B. in $branche_tabelle['branche1'] alles zusammen habe? group? join?

  1. Grüße,

    $sql="select * from tabelle1 order by branche1 asc";

    MFG
    bleicher

    --
    __________________________-

    FirefoxMyth
    1. Du hast leider mein Anliegen nicht verstanden.
      Nach diesem Select hätte ich die DREI branchen immer noch getrennt in der Ausgabe...

      1. Grüße,

        Nach diesem Select hätte ich die DREI branchen immer noch getrennt in der Ausgabe...

        na und? ist es nicht wurst ob du jetzt einen oder 3 key auf werte überprüfst?
        MFG
        bleicher

        --
        __________________________-

        FirefoxMyth
        1. Nein, ist es eben für die schleife in der ich die Daten in das select-menü eintrage eben nicht. Ich möchte halt am liebsten jede vorhandene Branche, ganz gleich in welcher Zeile und Spalte (1,2,3) die wie oft vorkommt, bereits beim Select nur noch einmal drin haben, so daß dann eine simple alphabetische Ausgabe zulässig wird.

          1. Nein, ist es eben für die schleife in der ich die Daten in das select-menü eintrage eben nicht. Ich möchte halt am liebsten jede vorhandene Branche, ganz gleich in welcher Zeile und Spalte (1,2,3) die wie oft vorkommt, bereits beim Select nur noch einmal drin haben, so daß dann eine simple alphabetische Ausgabe zulässig wird.

            Wie wärs mit einer Beispieltabelle und einen Wunschresultat?

            1. Aber klar:

              Branche1 Branche2 Branche3
              a        b        c
              h        a
              a
              u        u        u

              Die Buchstaben stehen stellvertretend für Branchen
              Hierbei soll am Ende jeweils nur ein Buchstabe (eine Branche) übrig bleiben, also nur einmal a, einmal u usw.

              1. Branche1 Branche2 Branche3
                a        b        c
                h        a
                a
                u        u        u

                Die Buchstaben stehen stellvertretend für Branchen
                Hierbei soll am Ende jeweils nur ein Buchstabe (eine Branche) übrig bleiben, also nur einmal a, einmal u usw.

                also wenn Branche3 leer ist, nimm Brache2, wenn diese Leer ist, Branche1?

                https://forum.selfhtml.org/?t=197421&m=1324250

                1. Hallo,

                  Branche1 Branche2 Branche3
                  a        b        c
                  h        a
                  a
                  u        u        u

                  Die Buchstaben stehen stellvertretend für Branchen
                  Hierbei soll am Ende jeweils nur ein Buchstabe (eine Branche) übrig bleiben, also nur einmal a, einmal u usw.
                  also wenn Branche3 leer ist, nimm Brache2, wenn diese Leer ist, Branche1?

                  nein, habe ich anders verstanden:
                  Nimm alle drei Branchen; nur wenn einer der drei Feldinhalte schon in einem früheren Datensatz vorkam, vergiss ihn.
                  Im Prinzip läuft's doch darauf hinaus:
                   * Werte aus allen drei Spalten aufsammeln
                   * Dubletten eliminieren (erfordert evtl. vorheriges Sortieren)
                  Ich habe allerdings das Gefühl, dass das Datenmodell ungünstig entworfen ist.

                  So long,
                   Martin

                  --
                  Computer funktionieren grundsätzlich nicht richtig.
                  Wenn doch, hast du etwas falsch gemacht.
                  1. nein, habe ich anders verstanden:
                    Nimm alle drei Branchen; nur wenn einer der drei Feldinhalte schon in einem früheren Datensatz vorkam, vergiss ihn.
                    Im Prinzip läuft's doch darauf hinaus:
                    * Werte aus allen drei Spalten aufsammeln
                    * Dubletten eliminieren (erfordert evtl. vorheriges Sortieren)
                    Ich habe allerdings das Gefühl, dass das Datenmodell ungünstig entworfen

                    Ja genau so ist es gemeint. Und zur blöden Datenbankstruktur habe ich ja schon was gesagt, aber da darf ich nicht dran, sonst würde ich die Branchen einfach auslagern...

                    1. Du willst also statt drei Spalten nur eine Spalte mit den Einträgen aller drei Spalten

                      http://dev.mysql.com/doc/refman/5.5/en/union.html

                      1. Hilfe!!

                        Nachdem ich mir das halbe Wochenende mit der Anweisung um die Ohren geschlagen habe und nicht weiterkomme, poste ich hier nochmal die Anweisung:

                        "SELECT DISTINCT branche,branche2,branche3 UNION (SELECT branche,branche2,branche3) FROM datenbank AS allebranchen ORDER by allebranchen ASC"

                        ...bekomme leider nur eine Fehlermeldung.

                        Und nochmal als Kurzzusammenfassung:
                        Alle Branchen der Spalten (branche,branche2,branche3) sollen in einem String gesammelt werden, nur einmal vorkommen und dann ausgebenen werden.

                        Wo liegt denn nun der Fehler?

                        1. Hallo,

                          Nachdem ich mir das halbe Wochenende mit der Anweisung um die Ohren geschlagen habe und nicht weiterkomme, poste ich hier nochmal die Anweisung:

                          "SELECT DISTINCT branche,branche2,branche3 UNION (SELECT branche,branche2,branche3) FROM datenbank AS allebranchen ORDER by allebranchen ASC"

                          Wo liegt denn nun der Fehler?

                          UNION erwartet vollständige SELECT-Anweisungen.
                          DISTINCT ist überflüssig, weil UNION DISTINCT Standardverhalten ist.

                          (SELECT  
                              branche allebranchen   -- einen Aliasnamen vergeben wir genau einmal  
                          FROM  
                              datenbank)  
                            
                          UNION  
                            
                          (SELECT  
                              branche2  
                          FROM  
                              datenbank)  
                            
                          UNION  
                            
                          (SELECT  
                              branche3  
                          FROM  
                              datenbank)  
                            
                          ORDER BY allebranchen     -- MySQL erwartet geklammerte Einzelabfragen  
                                                    -- und einen Aliasnamen für die zu sortierende  
                                                    -- Spalte, wenn das Gesamtresultat sortiert werden  
                                                    -- soll, siehe MySQL-Handbuch, [link:http://dev.mysql.com/doc/refman/5.0/en/union.html@title=UNION-Syntax].  
                          
                          

                          Freundliche Grüße

                          Vinzenz

                          1. DISTINCT ist überflüssig, weil UNION DISTINCT Standardverhalten ist.

                            Üblicherweise ja, dennoch ist es afaik nicht definiert ob ALL oder DISTINCT das Standardverhalten in einer SQL-Implementierung sein muss.

                            1. Hallo suit,

                              DISTINCT ist überflüssig, weil UNION DISTINCT Standardverhalten ist.
                              Üblicherweise ja, dennoch ist es afaik nicht definiert ob ALL oder DISTINCT das Standardverhalten in einer SQL-Implementierung sein muss.

                              Wichtig ist selbstverständlich, dass man UNION DISTINCT (explizit oder implizit) verwendet. SELECT DISTINCT in Kombination mit UNION ALL könnte wieder zu unerwünschten Mehrfachnennungen führen :-) Daher ist SELECT DISTINCT definitiv überflüssig.

                              MySQL - und hier im Thread geht es um MySQL - definiert sein Standardverhalten als UNION DISTINCT, seit MySQL UNION versteht. [1] :-)

                              Freundliche Grüße

                              Vinzenz

                              [1] muss natürlich nicht so bleiben ...

                2. Moinsen!

                  Branche1 Branche2 Branche3
                  a        b        c
                  h        a
                  a
                  u        u        u

                  Die Buchstaben stehen stellvertretend für Branchen
                  Hierbei soll am Ende jeweils nur ein Buchstabe (eine Branche) übrig bleiben, also nur einmal a, einmal u usw.

                  also wenn Branche3 leer ist, nimm Brache2, wenn diese Leer ist, Branche1?

                  Ich denke eher er will a, b, c, h, u rausbekommen. Unabhaengig, wo und wie oft die noch in den drei Tabellen stehen. Oder sehe ich das falsch?

                  --
                  Ich bin dafuer verantwortlich was ich sage, nicht dafuer, was Du verstehst.
                3. Branche1 ist immer voll, branche2+3 KÖNNEN Daten enthalten, müssen aber nicht.
                  Sowohl in Branche1 kann dieselbe Branche in diversen Datensätze vorhanden sein, als auch in Branche2+3.

            2. Hallo,

              Vielleicht ist sowas gemeint. Im Branchenmenü (links) erscheinen dieselben Branchen als Unterschiedliche Menüpunkte, je nachdem welche einem Datensatz zugeordnet sind.

              Rubrik -> Branche1 -> Branche2 -> Branche3
              oder
              Rubrik -> Branche2 -> Branche1 -> Branche3
              oder auch...

              Gruß, Don P

  2. moin,

    Wie erfasse ich die anderen beiden branchen (branche2, branche3) so daß ich im query für die Ausgabe, z.B. in $branche_tabelle['branche1'] alles zusammen habe? group? join?

    weder noch, UNION (diesmal nicht UNION ALL) ist in diesem falle dein freund.

    Ilja