Abfrage von zwei Tabellen in einer Abfrage

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

  • Abfrage von zwei Tabellen in einer Abfrage

    Hallo PHP-User,

    ich hoff ich nerve nicht mit meiner Fragerei,
    jedoch finde ich dieses Forum für Anfänger genial
    bezüglich des Lererfolges.

    Ich habe folgendes vor, ich möchte z.B. eine Tabelle erstellen,
    in der einige Angaben nur als Werte gespeichert sind und möchte in einer anderen Tabelle der Werte entsprechend die richtigen Angaben abspeichern.

    z.B. Tabelle 1 :

    Zellenkopf = AGENT_ID
    Inhalt = 6

    Tabell 2

    ID = 5
    Browser = Netscape Navigator
    ID = 6
    Browser = Internet Explorer

    Wie ich das in die Tabellen speicher habe ich inzwischen
    herausbekommen, jedoch habe ich ein Problem mit der Abfrage,
    da diese in einer geschehen soll.

    z.B. sql="select agent_id from xxx_123";

    Nun bekomme ich die Zahl '6' ausgegeben,
    jedoch wie lasse ich den dazu gehörigen Browser Anzeigen ?

    Danke im Voraus

    Gruß Manuela

  • #2
    hi.

    wenn die ID=5 oder ID=6 in einer Spalte namens AgentId gespeichert sind (IN BEIDEN TABELLEN) dann kannst du diese abfrage nehmen.

    du kannst den namen der spalte auch anderes nennen. Sinnvoll ist jedoch, dass es der gleiche name ist.

    in deiner referenztabelle sollte die AgentId PRIMARY sein.

    Code:
    SELECT * FROM UserAgents
                    LEFT OUTER JOIN ref_UserAgents USING(AgentId);
    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


    • #3
      Mhhhh, danke für die schnelle Antwort,
      jedoch wo füge ich
      PHP-Code:
      LEFT OUTER JOIN ref_UserAgents USING(AgentId
      ein.

      Die derzeitige Abfrage lautet

      PHP-Code:
      $query_text "SELECT Hostname,tld Domains,IP,Referer,Seareng,Res_W,Res_H,Color,FROM_UNIXTIME(time, '%d. %m. %Y %H:%i:%s')Zeit FROM ".$tbl_logs." WHERE time >= $first_of_month AND time <= $last_of_month "
      Die ausgeschriebenen Browser befinden sich in der Tabelle 'agents' Spalte 'agent' und wird durch die Spalte 'ID' zugeordnet.

      Tabelle agents :



      Der Wert für die Zuordnung befindet sich in der Tabelle 'name_logs'
      und in der Spalte 'agentid'.

      Tabelle name_logs :



      Danke im voraus :-)

      Gruß Manuela

      Kommentar


      • #4

        eigentlich ist es so, wie ich es im letzten post geschrieben habe.

        in deinem fall (da unterschiedliche namen der spalten) muss es so aussehen.

        PHP-Code:
        $query_text "SELECT L.Hostname,L.tld Domains,L.IP,L.Referer,L.Seareng,L.Res_W,L.Res_H,L.Color,FROM_UNIXTIME(L.time, '%d. %m. %Y %H:%i:%s') Zeit,".
                      
        " A.id, A.agent, A.browser, A.version, A.version_st, A.system ".
                      
        " FROM "$tbl_logs " L ".
                      
        " LEFT OUTER JOIN agents A ON L.agentid = A.id "
                      " WHERE L.time BETWEEN "
        .$first_of_month." AND ".$last_of_month
        ich habe auch mal die WHERE clausel verbessert ...
        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


        • #5
          Danke für die Mühe,
          jeoch bekomme ich folgende Fehlermeldung :

          'Parse error: parse error, unexpected T_CONSTANT_ENCAPSED_STRING in /usr/local/httpd/htdocs/kunden/web152/html/mysql2excel.php on line 104'

          Wobei Zeile '104' folgendes enthält :

          " WHERE L.time BETWEEN ".$first_of_month." AND ".$last_of_month;

          Was ich vergessen hatte zu erwähnen ist, daß in der Select-Abfrage enthaltene 'time' eine Spalte in der Datenbank ist, die eine Datumsangabe im Format 'Unix-Timestamp' enthält.



          Ich weis, dieses ist nicht GUT, ich werde es auch so bald als Möglich umändern.

          Der komplette Code :

          PHP-Code:
          <?php 

              Header
          ("Content-Type: application/vnd.ms-excel");

              
          $db_link mysql_connect("xxx""xxx""xxx")
              or die(
          "Keine Verbindung möglich!");
              
          mysql_select_db("xxx")
              or die(
          "Auswahl der Datenbank fehlgeschlagen");

              
          $monat date("m"); $jahr date("Y");
              
          $monat $monat 1;
              if (
          $monat == 0) {
                  
          $monat 12;
                  
          $jahr $jahr 1;
              }
              switch (
          $monat) {
              case 
          1:
                  
          $lastday 31;
                  break;
              case 
          2:
                  
          $lastday 28;
                  break;
              case 
          4:
              case 
          6:
              case 
          9:
              case 
          11:
              
          $lastday 30;
              break;
              default:
                 
          $lastday 31;
                  break;
              case 
          3:
                  
          $lastday 31;
                  break;
              case 
          4:
                  
          $lastday 30;
                  break;
              case 
          5:
                  
          $lastday 31;
                  break;
              case 
          6:
                  
          $lastday 30;
                  break;
              case 
          7:
                  
          $lastday 31;
                  break;
              case 
          8:
                  
          $lastday 31;
                  break;
              case 
          9:
                  
          $lastday 30;
                  break;
              case 
          10:
                  
          $lastday 31;
                  break;
              case 
          11:
                  
          $lastday 30;
                  break;
              case 
          12:
                  
          $lastday 31;
                  break;
              default:
                  
          $lastday 30;
              }

              
          $first_of_month mktime (0,0,0,$monat,1,$jahr);
              
          $last_of_month mktime (23,59,59,$monat,$lastday,$jahr);

              if (
          $monat 10$monat "0".$monat;


              
          $query_text "SELECT L.Hostname,L.tld Domains,L.IP,L.Referer,L.Seareng,L.Res_W,L.Res_H,L.Color,FROM_UNIXTIME(L.time, '%d. %m. %Y %H:%i:%s') Zeit,".
                        
          " A.id, A.agent, A.browser, A.version, A.version_st, A.system ".
                        
          " FROM "$tbl_logs " L ".
                        
          " LEFT OUTER JOIN pphl_agents A ON L.agentid = A.id "
                        " WHERE L.time BETWEEN "
          .$first_of_month." AND ".$last_of_month;
                        
              
          $result mysql_query($query_text$db_link);
              
          $fieldcounts mysql_num_fields($result);
              for(
          $i 0$i $fieldcounts$i++)
                  {
                  
          $fieldtype mysql_fetch_field($result$i);
                  if (
          $i < ($fieldcounts-1))
                      {
                      echo 
          "$fieldtype->name \t";
                      }
                  else
                      {
                      echo 
          "$fieldtype->name \n";
                      }
                  }
              
          $myrow mysql_fetch_array($result);
              do
                  {
                  for(
          $i 0$i $fieldcounts$i++)
                      {
                      
          $fieldname mysql_field_name($result$i);
                      if (
          $i < ($fieldcounts-1))
                          {
                          echo 
          $myrow[$fieldname] . "\t";
                          }
                      else
                          {
                          echo 
          $myrow[$fieldname] . "\n";
                          }
                      }
                  }
              while (
          $myrow mysql_fetch_array($result));

          ?>
          Danke im voraus Gruß Manuela

          Kommentar


          • #6
            Danke ich habe es heraus bekommen :

            PHP-Code:
            $query_text "Select Hostname,tld Domains,IP,Agent,Referer,Seareng,Color,FROM_UNIXTIME(time, '%d. %m. %Y %H:%i:%s') Zeit,"
                             
            "TIME_FORMAT(SEC_TO_TIME(online),'%k:%i:%s') AS Online, "
                            
            "CONCAT(res_w,'x',res_h) AS res "
                            
            "FROM $tbl_logs AS L, $tbl_agents AS A "
                            
            "WHERE agentid = A.id "
            Nur wie bringe ich nun die Abfrage für den Monatszeitraum unter :

            PHP-Code:
            "WHERE time >= $first_of_month AND time <= $last_of_month "
            Denn eine doppelte 'Where'-Anweisung fürt zu einem Fehler !?

            Gruß Manuela
            Zuletzt geändert von manuelakersten; 26.12.2002, 10:30.

            Kommentar


            • #7
              genau. da war ein punkt zu wenig. habe ich wohl übersehen ...

              was meinst du mit doppelter WHERE -anweisung?
              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


              • #8
                Kein Problem, ich sage ja ich möchte durch diese Post's lernen **grins**

                bezüglich der 'where-Anweisung', ich möchte ja nur die Ergebnisse
                des letzten Monats darstellen lassen, was beim Unix-Timestamp nicht gerade einfach ist, daher die 'case-difinitionen'.

                Nun habe ich die Monate für das ganze Jahr damit dekleriert und in den Variabeln '$first_of_month' und '$last_of_month' geschrieben und dieses mit dem Befehl
                PHP-Code:
                WHERE time >= $first_of_month AND time <= $last_of_month "; 
                an die Abfrage dran gehängt ( siehe kompletten Script oben ).

                Dieses möchte ich nun in die neue 'Select-Abfrage' unterbringen,
                so das wirklich nur das Ergebnis vom vorherigen Monat angezeigt wird.

                Dann hätte ich, glaube ich erstmal alle Angaben die ich für den Excel-Import benötige und bin natürlich SUPER dankbar.

                Das einzige was mich noch interessieren würde, was hie warscheinlich eher zur PHP-Sparte passen würde, diese Ergebnisse können natürlich nur Benutzer nutzen, die Excel haben, gibt es eigentlich die Möglichkeit das Egebnis dieses Scriptes in eine Tabelle anzeigen zu lassen ( wie z.B. beim Programm 'PHPMyAdmin`( siehe die eingefügten Bilder meiner Datenbank ) und dieses dann vom Benutzer Ausdrucken zu lassen, daß wäre warscheinlich die Krönung des Scriptes.

                Gruß Manuela
                Zuletzt geändert von manuelakersten; 26.12.2002, 13:04.

                Kommentar


                • #9
                  das was du jetzt in der where geschrieben hattest, geht ja auch mit den BETWEEN.

                  die beiden vars $start und $end musst du schon vorher ausrechnen...
                  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


                  • #10
                    Original geschrieben von manuelakersten
                    Das einzige was mich noch interessieren würde, was hie warscheinlich eher zur PHP-Sparte passen würde, diese Ergebnisse können natürlich nur Benutzer nutzen, die Excel haben, gibt es eigentlich die Möglichkeit das Egebnis dieses Scriptes in eine Tabelle anzeigen zu lassen ( wie z.B. beim Programm 'PHPMyAdmin`( siehe die eingefügten Bilder meiner Datenbank ) und dieses dann vom Benutzer Ausdrucken zu lassen, daß wäre warscheinlich die Krönung des Scriptes.
                    na logo. einfach ne ausgabetabelle machen....
                    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


                    • #11
                      Sorry, daß ich zu blöd bin,
                      das mit der Ausgabetabelle hatte ich schon einmal probiert,
                      jedoch nie richtig hinbekommen und erst recht das mit der Druckunterstützung nicht **grinstverschämt**

                      In meinem Super DataBecker PHP-Handbuch steht nichts über eine 'BETWEEN'-Anweisung ( glaube ich muß mir mal ein anständiges Buch kaufen ) !

                      Ich weiß Du hast mir schon sehr viel geholfen und das noch an einem Feiertag, aber vielleicht noch ein letztes Mal ?!?!? :-{}

                      Gruß Manuela

                      Kommentar


                      • #12
                        Du willst also eine Tabelle einer Datenbank auslesen und das Ergebnis in ein EXCEL Sheet ausgeben?
                        Hier ein Beispiel
                        PHP-Code:
                        <?php

                        $DATABASE 
                        "test";
                        $TABLE_NAME "termine";

                        Header("Content-Type: application/vnd.ms-excel");  // Dieser Header ist wichtig, der erzeugt ein Excel

                        mysql_connect("localhost""""")
                               or print 
                        "&gt;&gt;&gt; MySQL-Error: ".mysql_errno()." -&gt; ".mysql_error()."<br>\n";
                               
                        mysql_select_db($DATABASE)
                               or print 
                        "&gt;&gt;&gt; MySQL-Error: ".mysql_errno()." -&gt; ".mysql_error()."<br>\n";

                        $result mysql_query("SHOW FIELDS FROM $DATABASE.$TABLE_NAME");

                        while (
                        $row mysql_fetch_array($result)) {
                            print 
                        "$row[Field] $row[Type]\t"// \t bedeutet Tabulator, also nächste Zelle in der Zeile (Spalte)
                            
                        $fields[] = $row[Field];
                        }
                        print 
                        "\n"// \n Zeilenvorschub, also 1. Zelle der nächsten Zeile

                        $query_text "SELECT * FROM $TABLE_NAME";

                        $result mysql_query($query_text);

                        while (
                        $row mysql_fetch_array($result)) {
                           for (
                        $i=0$i<count($fields); $i++) {
                                print 
                        $row[$fields[$i]]."\t"// \t nächste Spalte
                           
                        }
                           print 
                        "\n"// \t nächste Zeile
                        }
                        ?>

                        Ups das hast Du ja schon oben weiter, hab da nicht so drauf geachtet, was zuvor gepostet wurde, sorry. Vielleicht hilft's doch, ansonsten vergiß es einfach
                        Zuletzt geändert von hand; 26.12.2002, 16:24.

                        Kommentar


                        • #13
                          Troztdem danke Hand, richtig das mit dem Excel habe ich ( fast - bis auf die Sache mit dem Between ) mhhh ich glaube ich habe mich bezüglich der Tabelle irgendwie falsch ausgedrückt.

                          Ich habe eine MYSQL-Abfrage bei der das Ergebnis über mehrere Seiten geht und möchte dieses in einer Tabelle anzeigen lassen.

                          Nun möchte ich jeoch nicht für jedes Ergebnis eine "<table><td></td></table>" per Hand erstellen,
                          wie mache ich es am besten um diese Tabelle mit z.B. 5 Zellen über eine Schleife erzeugen zu lassen und gleichzeitig das MySQL-Ergebnis in die richtige Zelle zu setzen.

                          Danke im voraus

                          Gruß Manuela
                          Zuletzt geändert von manuelakersten; 27.12.2002, 07:48.

                          Kommentar

                          Lädt...
                          X