Ankündigung

Einklappen
Keine Ankündigung bisher.

Mehrere MySQL Abfragen in einer While schleife

Einklappen

Neue Werbung 2019

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

  • Mehrere MySQL Abfragen in einer While schleife

    Guten Tag,

    meine PHP-Kentnisse stoßen an ihre grenzen

    Ich habe Hier 3 DBAbfragen aus 3 versch. Tabellen die zusammenhängen:

    PHP-Code:
            $qry_SelQty2=sprintf("select UserID, orderid, closed from bestellung where closed=0");
            
    $rs_SelQty2=mysql_query($qry_SelQty2,$conn);
            
    $row_SelQty2mysql_fetch_array($rs_SelQty2)

            
    $userid2=$row_SelQty2['UserID']
            
    $qry_SelQty3=sprintf("select customerID from UserLogin where userid='%d';",$userid2);
            
    $rs_SelQty3=mysql_query($qry_SelQty3,$conn);
                    
    $row_SelQty3mysql_fetch_array($rs_SelQty3)

        
    $custid=$row_SelQty3['customerID'];
            

            
                    
    $qry_SelQty4=sprintf("select postalCode, city from Customer where customerID='%d';",$custid);
            
    $rs_SelQty4=mysql_query($qry_SelQty4,$conn);
            
    $row_SelQty4mysql_fetch_array($rs_SelQty4
    in der tabelle bestellungen sind viele einträge mit der selben orderid .

    Ich möchte nun diese Einträge + city+plz (dafür mehrere Abfragen) in einer Tabelle anzeigen lassen, durch eine while Schleife.
    Da fängt mein Problem an. Es will irgendwie nicht funktionieren, die orderids werden angezeigt durch(mysql_fetch_array($rs_SelQty2)) in der While Schleife. Dennoch werden die dazugehörigen PLZ und City aus den anderen Tabellen nicht angezeigt. Außerdem weiß ich nicht wie ich dafür sorgen kann das er nicht die doppelten einträge von der OrderID anzeigt.

    hier ist der rest:

    PHP-Code:
              <? while($row_SelQty = mysql_fetch_array($rs_SelQty2)) 
     
     
                { 
                    $order=$row_SelQty['orderid'];
                    $si++;
                    $closed=$row_SelQty['closed'];
                    $userid2=$row_SelQty['UserID'];

                                    $plz=$row_SelQty3['postalCode'];
                                    $ort=$row_SelQty3['city'];


                    ?>
                        
                              <tr class="trcontent2">
                            <td height="20" align="left"><?php echo $si;//$row['deno_id']; ?></td>
                            <td align="center"><a href="javascript:last(<? echo $order;?>)"?><?php echo $order?></a></td>
                            <td align="left"><? echo $plz;   ?></td> 
                            <td align="left"><? echo $ort;?> </td> 


                            <td align="left"><? if ($closed == 0){?>
                                                    <font color=/"red/">Warte auf Antwort vom Lieferanten<br></font>
                                                    <?} elseif ($closed == 1){ ?><font color="green">Lieferant hat Auftrag angenommen </font><? }?></td></tr>
    <? }?>

  • #2
    Zitat von musaaslan Beitrag anzeigen
    Guten Tag,

    meine PHP-Kentnisse stoßen an ihre grenzen
    Nicht nur die, auch bei SQL sieht es ganz düster aus. Google bitte nach JOIN.
    PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services

    Kommentar


    • #3
      Hab ich bereits dennoch schwer das System dahinter verstanden, kannst du mir einen denkanstoß an einer beispiel abfrage für die obrigen Abfragen nennen. Bin dir tiefst dankbar!

      Kommentar


      • #4
        Zitat von musaaslan Beitrag anzeigen
        Hab ich bereits dennoch schwer das System dahinter verstanden, kannst du mir einen denkanstoß an einer beispiel abfrage für die obrigen Abfragen nennen. Bin dir tiefst dankbar!
        Bin zu faul, Deine Tabellen zu erraten oder reverse zu erforschen, daher:

        Code:
        test=# create table kunde (id int primary key, name text);
        CREATE TABLE                                              
        Time: 130,636 ms                                          
        test=*# create table bestellung (id int primary key, kunde_id int references kunde, datum date);
        CREATE TABLE                                                                                    
        Time: 41,386 ms                                                                                 
        test=*# insert into kunde values (1, 'kunde1');
        INSERT 0 1                                     
        Time: 0,456 ms                                 
        test=*# insert into kunde values (2, 'kunde2');
        INSERT 0 1                                     
        Time: 0,166 ms                                 
        test=*# insert into bestellung values (1, 2, current_date);
        INSERT 0 1
        Time: 0,811 ms
        test=*# insert into bestellung values (2, 2, current_date);
        INSERT 0 1
        Time: 0,362 ms
        test=*# insert into bestellung values (3, 2, current_date);
        INSERT 0 1
        Time: 0,313 ms
        test=*# insert into bestellung values (4, 1, current_date);
        INSERT 0 1
        Time: 0,342 ms
        test=*# select b.datum, k.name from bestellung b left join kunde k on b.kunde_id=k.id;
        -[ RECORD 1 ]-----
        datum | 2014-10-16
        name  | kunde2
        -[ RECORD 2 ]-----
        datum | 2014-10-16
        name  | kunde2
        -[ RECORD 3 ]-----
        datum | 2014-10-16
        name  | kunde2
        -[ RECORD 4 ]-----
        datum | 2014-10-16
        name  | kunde1
        
        Time: 0,481 ms
        test=*# \x
        Expanded display is off.
        test=*# select b.datum, k.name from bestellung b left join kunde k on b.kunde_id=k.id;
           datum    |  name
        ------------+--------
         2014-10-16 | kunde2
         2014-10-16 | kunde2
         2014-10-16 | kunde2
         2014-10-16 | kunde1
        (4 rows)

        Den Rest bitte aus den ca. 100 Millionen Links erlesen, die Google Dir zum Thema liefert.
        PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services

        Kommentar


        • #5
          Danke vielmals hab es nun hinbekommen, dennoch habe ich ein problem mit DESC
          Die Abfrage
          PHP-Code:
          $qry_SelQty2="SELECT b.UserID, b.orderid, b.closed, u.customerID, c.postalCode, c.city FROM bestellung b LEFT JOIN UserLogin u ON u.userid=b.UserID LEFT JOIN Customer c ON c.customerID=u.customerID WHERE b.closed = 0  GROUP BY b.orderid DESC
              "

          die höchste orderid wird nicht angezeigt (176) es beginnt absteigend nur ab 175. Ohne DESC funktioniert es.

          Kommentar


          • #6
            Zitat von musaaslan Beitrag anzeigen
            Die Abfrage
            PHP-Code:
            $qry_SelQty2="SELECT b.UserID, b.orderid, b.closed, u.customerID, c.postalCode, c.city FROM bestellung b LEFT JOIN UserLogin u ON u.userid=b.UserID LEFT JOIN Customer c ON c.customerID=u.customerID WHERE b.closed = 0  GROUP BY b.orderid DESC
                "

            die höchste orderid wird nicht angezeigt (176) es beginnt absteigend nur ab 175. Ohne DESC funktioniert es.
            Das GROUP BY ist an der Stelle nicht nur Bullshit, sondern auch ein Syntaxfehler. Nur MySQL erkennt ihn nicht (alle anderen Datenbanken der Welt erkennen ihn). Du suchst ORDER BY.
            PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services

            Kommentar


            • #7
              Ja ich möchte ja das nur einmal die orderid angezeigt wird und nicht doppelt. Ohne group by sieht es so aus:
              http://www.fotos-hochladen.net/view/...cmeku06fxs.png
              auch wenn ich diese abfrage verwende
              PHP-Code:
                      $qry_SelQty2="SELECT b.UserID, b.orderid, b.closed, u.customerID, c.postalCode, c.city FROM bestellung b LEFT JOIN UserLogin u ON u.userid=b.UserID LEFT JOIN Customer c ON c.customerID=u.customerID WHERE b.closed = 0  ORDER BY b.orderid DESC
                  "

              sind die einträge zwar doppelt aber dennoch fehlt die höchste orderid

              Kommentar


              • #8
                Zitat von musaaslan Beitrag anzeigen
                Ja ich möchte ja das nur einmal die orderid angezeigt wird und nicht doppelt.
                Dann nutze Aggregatsfunktionen. In PG könntest auch DISTINCT ON (...) nutzen, aber auch das kann MySQL nicht. Dein GROUP BY an dieser Stelle wird in zukünftigen MySQL-Versionen (ab 5.7.5 oder so) übrigens als Fehler erkannt. Also, mach es gleich richtig.
                PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services

                Kommentar


                • #9
                  Edit: hat sich geklärt hab zweimal mysql_fetch_aray ausgeführt. Danke an akretschmer. Vielen dank für deine hilfe.

                  Kommentar

                  Lädt...
                  X