Abfrage über zwei Tabellen mit Gruppierung(?)

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

  • Abfrage über zwei Tabellen mit Gruppierung(?)

    Hallo,

    also ich habe zwei Tabellen mit Messeterminen. In der einen stehen die Messetermine, in der anderen die Orte, Stand, Halle usw. In der Detailtabelle ist für jede Sprache (Englisch, Deutsch, Französisch) ein Datensatz enthalten.
    Jede Messe hat einen Eintrag in der Termintabelle, kann aber mehrere in der Detailtabelle haben. Für jede Sprache einen.

    Wie krieg ich jetz am schnellsten raus, welche Sprachen für eine Messe hinterlegt sind? Also ich mein, für eine Messe wär das ja kein Problem (SELECT * FROM detailtabelle WHERE id = 1.

    Ich will aber ne Liste mit den ganzen Terminen haben (für den Admin-Bereich) und da will ich nicht für jeden Termin so ne abfrage ausführen.Gibts da ne elegantere Lösung?

    Danke für eure Hilfe.

    PS: Also nochmal: mein Problem liegt NICHT an JOIN oder so *gg Das klappt wunderbar *g
    Zuletzt geändert von my|DCF; 02.04.2003, 20:40.
    Apache 1.3.27
    PHP 4.2.1
    MySQL 2.5.1
    SuSE Linux 8.1

  • #2
    SQL Struktur

    könntest du hier einmal die Struktur deiner Tabelle posten, dann kann ích dir die Abfrage zusammenbauen.

    Gruß
    spoilie

    Kommentar


    • #3
      Code:
      select m.name, d.lang from mastertabelle m, detailtabelle d where m.id=d.messeid
      wenn du in beiden tabellen ein feld messeid hast, kannst du auch nen inner join nehmen
      Code:
      select m.name, d.lang from mastertabelle m inner detailtabelle d using (messeid)
      oder is das nich das was du wolltest?
      Ich denke, also bin ich. - Einige sind trotzdem...

      Kommentar


      • #4
        ne, happieness, so weit war ich auch schon.... trotzdem danke ^^

        also tabellenstruktur:

        Mastertabelle:
        ID | Name
        1 | messe1

        Detailtabelle
        ID | Sprache | beschreibung
        1 | EN | my description
        1 | DE | meine beschreibung

        die anderen felder sind nicht so wichtig... mein abfrage ergebnis sollte dann so aussehen:

        ID | Name | Sprache1 | Sprache2
        1 | messe1 | DE | EN

        geht das?
        Apache 1.3.27
        PHP 4.2.1
        MySQL 2.5.1
        SuSE Linux 8.1

        Kommentar


        • #5
          nein (denke ich mal), du kriegst höchsten sowas
          Code:
          [b]ID    Messe      Sprache[/b]
          1     Messe1     DE
          1     Messe1     EN
          2     Messe2     DE
          3     Messe3     DE
          3     Messe3     EN
          und das sollte mein statement machen
          Ich denke, also bin ich. - Einige sind trotzdem...

          Kommentar


          • #6
            Das hab ich mir auch schon gedacht, das das nicht geht....

            also muss ich wohl doch erst aus der ersten Tabelle alles holen und dann für jeden Datensatz aus der Mastertabelle nochmal in die Detailtabelle und dort die Sprachen rausholen...

            also müsste das so funktionieren, oder ist da jemand anderer meinung???

            PHP-Code:
            $query "SELECT id, name FROM Mastertabelle;";
            $mysql_result mysql_query ($query$db_handle);
            $rows mysql_num_rows ($mysql_result);

            for (
            $i 0$i $rows$i++) {
              
            $row[$i] = mysql_fetch_array ($mysql_result);
              
            $query2 "SELECT lang FROM Detailtabelle WHERE id = $row[$i]['id'];";
              
            $mysql_result2 mysql_query ($query2$db_handle);
              
            $rows2 mysql_num_rows ($mysql_result2);
              
              for (
            $j 0$j $rows2$j++) {
                
            $row2 mysql_fetch_array ($mysql_result2);
                
            $lang[$j] = $row2['lang'];
              }

              
            $row[$i]['lang'] = $lang;


            wie sieht sowas dann von der performance aus? weil ich muss ja für jeden datensatz nochmal n neues query starten?!
            Apache 1.3.27
            PHP 4.2.1
            MySQL 2.5.1
            SuSE Linux 8.1

            Kommentar


            • #7
              machs doch so wie ich geschrieben hab.
              dann hast du alles in einer abfrage erledigt und musst nur innerhalb des skriptes nachschauen, wann sich die id ändert

              ich bin mir ziemlich sicher, dass die methode nicht langsamer/unperformanter ist als die variante mit 2 abfragen.

              zumal es ja nicht bei 2 abfragen bleibt (es sind bloß mindestens 2)

              du brauchst für n Messen n + 1 Abfragen und ich brauche für n Messen 1 Abfrage. Je mehr Messen du hast, desto besser gefällt mir meine variante

              btw: der detailtabelle hätte eine eigene id auch gutgetan oder?
              Ich denke, also bin ich. - Einige sind trotzdem...

              Kommentar


              • #8
                Wozu sollte ich in der Detailtabelle ne eigene ID brauchen? ich hab doch ne einduetigkeit der Kombination von Messe_ID und Sprache...

                Ja, deine Lösung hab ich schon so... hmm.. mal schauen, was ich verwende ^^
                Apache 1.3.27
                PHP 4.2.1
                MySQL 2.5.1
                SuSE Linux 8.1

                Kommentar


                • #9
                  also, ich habs jetz nach deiner methode gemacht, happiness... danke

                  PHP-Code:
                    $query "SELECT fair_dates.fair_id, name, beginning, ending, language, image ";
                    
                  $query .= "FROM fair_dates ";
                    
                  $query .= "INNER JOIN fair_details ";
                    
                  $query .= "ON fair_dates.fair_id = fair_details.fair_id ";
                    
                  $query .= "ORDER BY beginning, fair_dates.fair_id, language;";
                      
                    
                  $mysql_result mysql_query ($query$db_handle);
                    
                  $rows mysql_num_rows ($mysql_result);
                      
                    if (
                  $rows AND ($rows != 0) ) {
                      
                  $f = -1;
                      for (
                  $i 1$i <= $rows$i ++) {
                        
                  $row[$i] = mysql_fetch_array ($mysql_result);
                        if (
                  $last_id != $row[$i]['fair_id']) {
                          
                  $f++;
                          
                  $l 0;
                          
                  $fairs[$f] = $row[$i];
                          
                  $fairs[$f]['lang'][$l] = $row[$i]['language'];
                        } else {
                          
                  $l++;
                          
                  $fairs[$f]['lang'][$l] = $row[$i]['language'];
                        }
                        
                  $last_id $row[$i]['fair_id'];
                      }
                    } 
                  Apache 1.3.27
                  PHP 4.2.1
                  MySQL 2.5.1
                  SuSE Linux 8.1

                  Kommentar


                  • #10
                    JOIN Abfrage

                    Wenn ich bei einer Abfrage wie dieser
                    Code:
                    SELECT p_sub.*,COUNT(p_page.id) as count FROM p_sub LEFT JOIN p_page ON p_sub.suid=p_page.suid WHERE seid='$seid' GROUP by p_sub.name ORDER by count $way
                    mysql_fetch_array() mache, wie lauten die feldnamen im Array? Z.B. $res[p_sub.name]?

                    Kommentar


                    • #11
                      schau doch nach, lass dir das array mit print_r ausgeben

                      heißt abrer afaik nicht $res['p_sub.name'] sondern $res['name']
                      Ich denke, also bin ich. - Einige sind trotzdem...

                      Kommentar

                      Lädt...
                      X