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

  • musaaslan
    hat ein Thema erstellt Mehrere MySQL Abfragen in einer While schleife.

    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>
    <? }?>

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

    Einen Kommentar schreiben:


  • akretschmer
    antwortet
    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.

    Einen Kommentar schreiben:


  • musaaslan
    antwortet
    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

    Einen Kommentar schreiben:


  • akretschmer
    antwortet
    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.

    Einen Kommentar schreiben:


  • musaaslan
    antwortet
    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.

    Einen Kommentar schreiben:


  • akretschmer
    antwortet
    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.

    Einen Kommentar schreiben:


  • musaaslan
    antwortet
    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!

    Einen Kommentar schreiben:


  • akretschmer
    antwortet
    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.

    Einen Kommentar schreiben:

Lädt...
X