select über drei tabellen (eine könnte leer sein)

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

  • select über drei tabellen (eine könnte leer sein)

    hallo,

    wenn ich alle datensätze aus meinen tabellen haben möchte,
    dachte ich ,ich mache ein:
    select * from tabelle1,tabelle2,tabelle3 ;
    wenn aber eine tabelle keine daten hat , bekomme ich garn nichts
    ausgegeben.

    wie kann man dieses problem lösen?
    danke..

  • #2
    angenommen, in tabelle3 steht kein passender Datensatz:
    select * from tabelle1,tabelle2
    left join tabelle3 on where clause
    where where clause

    Ich hoffe, du hast Bedingungen für die Verknüpfung (where clause)!
    mein Sport: mein Frühstück: meine Arbeit:

    Sämtliche Code-Schnipsel sind im Allgemeinen nicht getestet und werden ohne Gewähr auf Fehlerfreiheit und Korrektheit gepostet.

    Kommentar


    • #3
      hallo,
      nein keine bedingungen.
      ich wollte mir nur alle daten aus den tabellen anzeigen lassen.
      ich kann im vorfeld auch nicht sagen welche tabelle eventuell
      leer ist.

      Kommentar


      • #4
        Wenn du nur alle Daten haben willst, dann mach drei getrennte Queries!

        sonst bekommst du a*b*c Ergebnisse (wenn die Tabellen a, b, bzw. c Zeilen enthalten)
        mein Sport: mein Frühstück: meine Arbeit:

        Sämtliche Code-Schnipsel sind im Allgemeinen nicht getestet und werden ohne Gewähr auf Fehlerfreiheit und Korrektheit gepostet.

        Kommentar


        • #5
          hallo,

          gut so könnte ich es machen.
          aber wie lasse ich es mit php darstellen.

          so habe ich es bisher:

          $zeige = mysql_query($db1,$db);
          while ($row = mysql_fetch_array($zeige))

          {
          ---hier wird dann eine tabelle mit dem ergebnis erstellt--
          }

          $db1 ="SELECT * FROM tabelle1"
          wenn ich nun noch eine zweite abfrage mache
          $db2 ="SELECT * FROM tabelle2"
          wie bekomme ich das dann in die while schleife ???

          Kommentar


          • #6
            Man kann Schleifen auch verschachteln:
            PHP-Code:
            $tabellen = array('tabelle1''tabelle2''tabelle3');
            foreach(
            $tabellen as $tab)
            {
              echo 
            "<h3>$tab</h3>"
              
            $zeige mysql_query("select * from $tab");
              while (
            $row mysql_fetch_array($zeige))
              {
                ..
              }

            mein Sport: mein Frühstück: meine Arbeit:

            Sämtliche Code-Schnipsel sind im Allgemeinen nicht getestet und werden ohne Gewähr auf Fehlerfreiheit und Korrektheit gepostet.

            Kommentar


            • #7
              hallo,
              klappt eigentlich ganz gut dein tipp.

              kann man im array auch die abfragen einbauen?

              $db1 = "select * from tabelle1,tabelle2 where tabelle1_id = tabelle2_id"
              $db2 = "select * from tabelle3,tabelle4 where tabelle3_id = tabelle4_id"

              $result = mysql_query ($db1,$db);
              $result1 = mysql_query ($db2,$db);

              $tabellen = array("$result,result1");
              foreach($tabellen as $tab)
              {
              //$zeige = mysql_query($tab,$db);
              while ($row = mysql_fetch_array($tab))
              {

              ............
              }}

              bekomme aber immer Resource id #4.

              habes es bisher so gemacht:

              ............

              while ($row = mysql_fetch_array($result1))
              {
              ......tabellenaufbau
              }

              while ($row = mysql_fetch_array($result2))
              {
              ......tabellenaufbau
              }


              ist bei 8 tabellen ziemlich dumm.

              danke für die hilfe.

              Kommentar


              • #8
                nimm mal aus der Zeile die Anführungszeichen raus:
                $tabellen = array([COLOR=red]"[/COLOR]$result,result1[COLOR=red]"[/COLOR]);

                oder denk mal ein bißchen nach und erstell ein Array aus den Queries:
                PHP-Code:
                $queries = array(
                  
                "select * from tabelle1,tabelle2 where tabelle1_id = tabelle2_id",
                  
                "select * from tabelle3,tabelle4 where tabelle3_id = tabelle4_id",
                  ...
                );
                foreach(
                $queries as $sql)
                {
                  echo 
                '<h3>'htmlentities($sql), '</h3>';
                  
                $result mysql_query($sql);
                  while (
                $row mysql_fetch_array($result))
                  {
                    ..
                  }

                mein Sport: mein Frühstück: meine Arbeit:

                Sämtliche Code-Schnipsel sind im Allgemeinen nicht getestet und werden ohne Gewähr auf Fehlerfreiheit und Korrektheit gepostet.

                Kommentar


                • #9
                  so,
                  habe es jetzt hinbekommen.
                  danke für deine gedult und hilfe.

                  Kommentar


                  • #10
                    array nach Uhrzeit sortieren

                    Hallo habe immer noch ein kleines Problemchen.
                    Ich habe ein array in dem Tabellen abgefragt werden.

                    Nun meine frage in beiden tabellen steht die Uhrzeit, kann ich
                    die ausgabe danach sortieren lassen??

                    Folgendermaßen sieht die abfrage aus:
                    PHP-Code:
                    $queries = array(
                      
                    "SELECT * FROM ".$tabelle." WHERE datum='".$year."-".$new_month_num."-".$new_day."' AND check=1",
                      
                    "SELECT * FROM ".$tabelle2." WHERE datum='".$year."-".$new_month_num."-".$new_day."' ORDER BY uhr, text ASC",
                    );

                    foreach(
                    $queries as $sql)
                    {
                      
                    $result mysql_query($sql);
                      while (
                    $row mysql_fetch_array($result))
                      {
                      echo 
                    "<font  face=Arial size=1>".$row[uhr]." ".$row[text]."</font><br>";
                      }

                    Kommentar


                    • #11
                      willst du eine 'mischsortierung' beider queries haben?`

                      wenn ja, muss du beide queries zu einer zusammenführen.

                      wenn du das nicht alleine schaffst, wäre es hilfreich, wenn du die struktur(en) beider tabellen mal postest. ein export mit phpmyadmin ist hierbei sehr hilfreich.
                      INFO: Erst suchen, dann posten![color=red] | [/color]MANUAL(s): PHP | MySQL | HTML/JS/CSS[color=red] | [/color]NICE: GNOME Do | TESTS: Gästebuch[color=red] | [/color]IM: Jabber.org |


                      Kommentar


                      • #12
                        Könnte sehr gut hilfe gebrauche und bedanke mich schon mal für deine,
                        hier sind meine beiden tabellen:

                        Code:
                        ## tabelle1:
                        
                        CREATE TABLE `veranwoche` (
                          `datum` varchar(30) NOT NULL default '',
                          `uhr` varchar(10) NOT NULL default '',
                          `text` varchar(50) NOT NULL default '',
                          `thema` varchar(100) NOT NULL default '',
                          `id` tinyint(10) unsigned NOT NULL auto_increment,
                          UNIQUE KEY `id` (`id`)
                        ) TYPE=MyISAM AUTO_INCREMENT=65 ;
                        
                        
                        ## tabelle2:
                        
                        CREATE TABLE `termine` (
                          `datum` varchar(12) NOT NULL default '',
                          `bis` varchar(12) default NULL,
                          `uhr` varchar(20) default NULL,
                          `text` varchar(255) NOT NULL default '',
                          `check` char(3) NOT NULL default '',
                          `id` tinyint(4) NOT NULL auto_increment,
                          UNIQUE KEY `id` (`id`)
                        ) TYPE=MyISAM AUTO_INCREMENT=127 ;

                        Das datum liegt in beiden folgendermaßen vor: JJJJ-MM-TT
                        Die Uhrzeit : HH:MM

                        EDIT:
                        [code]-tags by Abraxax
                        Zuletzt geändert von Abraxax; 29.11.2003, 19:00.

                        Kommentar


                        • #13
                          lege erst einmal datum und uhr in ein feld zusammen vom typ DATETIME. dann schauen wir weiter .



                          und warum machst du zwei tabellen von gleicher struktur? das könntest du bestimmt auch in eine tabelle packen.
                          INFO: Erst suchen, dann posten![color=red] | [/color]MANUAL(s): PHP | MySQL | HTML/JS/CSS[color=red] | [/color]NICE: GNOME Do | TESTS: Gästebuch[color=red] | [/color]IM: Jabber.org |


                          Kommentar


                          • #14
                            Es sind 2 Tabellen die von verschiedenen Personen verwaltet werden und ich würde sie gerne über eine Seite auslesen lassen.
                            Es ist eine art Monatskalender der immer den aktuellen monat mit beiden Termintabellen anzeigt.

                            Ist es zwingend notwendig die uhrzeit mit dem Datum zu kombinieren??
                            Sonst müsste ich eine menge in den anderen Seiten umbauen.

                            Kommentar


                            • #15
                              kombinieren ist nicht zwingend notwendig. nur sollte datum und uhrzeit auch einen korrekten feldtyp in der mysql bekommen.. ;-)

                              datum -> DATE
                              uhr -> TIME

                              damit solltest du am wenigsten probleme haben. das format der beiden 'neuen' feldtypen hast du ja bereits.

                              ich habe auch mal ein wenig rumgefummelt.... das sollte (könnte) so klappen.


                              PHP-Code:
                              $queries = array(  "SELECT * FROM ".$tabelle."
                                                  WHERE
                                                      datum = '"
                              .$year."-".$new_month_num."-".$new_day."' AND
                                                      check=1"
                              ,

                                                 
                              "SELECT * FROM ".$tabelle2."
                                                  WHERE
                                                      datum='"
                              .$year."-".$new_month_num."-".$new_day."'
                                                  ORDER BY uhr, text ASC"
                              );

                              $data = array();
                              $sort = array();
                              for(
                              $i=0;$i<count($queries);$i++)
                              {
                                  
                              $res mysql_query($queries[$i]) or die(mysql_error());
                                  while (
                              $row mysql_fetch_array($result))
                                  {
                                      
                              $data[$row['datum'].$row['uhr']] = $row;
                                      
                              $sort $row['datum'].$row['uhr'];
                                  }
                              }

                              natsort($sort);

                              for(
                              $i=0;$i<count($sort);$i++)
                              {
                                  echo 
                              '<font face="Arial" size="1">';
                                  echo 
                              $data[$sort[$i]]['datum'].' '.$data[$sort[$i]]['uhr'].' - '.$data[$sort[$i]]['text'];
                                  echo 
                              '</font><br>';

                              ist bestimmt optimierungsbedürftig...
                              INFO: Erst suchen, dann posten![color=red] | [/color]MANUAL(s): PHP | MySQL | HTML/JS/CSS[color=red] | [/color]NICE: GNOME Do | TESTS: Gästebuch[color=red] | [/color]IM: Jabber.org |


                              Kommentar

                              Lädt...
                              X