Récupère les données de mysql via PHP, puis groupe les lignes avec des valeurs de colonnes similaires et compte

J'ai essentiellement ce programme qui récupère les commandes d'une base de données. Mon problème est que je dois faire un rapport de telle sorte que le script récupère des lignes avec la même valeur de colonne, puis les compte et les affiche.

Dites Table 'commandes'

salesorder family product
1111111    pi_gx  af000
1111111    pi_gx  af000
1111112    sfng   af111
1111113    pi_gx  af000

s'affichera sur ma page php

sales order   family  qty   product
1111111       pi_gx   2     af000
1111112       sfng    1     af111
1111113       pi_gx   1     af000

Il compte la quantité de ligne de ladite commande client et affiche la quantité, en même temps affiche seulement une seule copie de cette commande dans ma page.

Voici le code:

<body class="printable">

New Orders Dropped for Product Integration 1X

<table align="center" width="100%">
<tr>
    <td class="labels">Prepared: </td>
<td class="boxed"><?php date_default_timezone_set("Asia/Singapore");$today = date("d/m/y H:i");echo $today; ?></td>
    <td class="divider"> </td>
    <td class="labels">Time Coverage:  </td>
    <td class="boxed">12:00 to 2:00</td>
    <td class="divider"> </td>
    <td class="labels">BirthStamp: </td>
    <td class="boxed">5/21/2012</td>
    <td class="divider"> </td>
    <td class="labels">Saved: </td>
    <td class="boxed"><?php echo $today; ?></td>
</tr>
<tr>
    <td class="labels">Prepared by (Production): </td>
    <td><input type="text" name="preparer" id="preparer" class="boxedPrepared" /></td>
    <td class="divider"></td>
    <td class="labels">Recorded by (Store): </td>
    <td><input type="text" name="recorder" id="recorded" class="boxedPrepared" /></td>
    <td class="divider"></td>
    <td class="labels">Recorded: </td>
    <td class="boxed" colspan="3"><?php echo $today; ?></td>
</tr>
</table>

<?php $conn = mysql_connect("localhost", "root", "123456") or die(mysql_error()); mysql_select_db("store") or die(mysql_error()); $sql = mysql_query("SELECT * FROM report ORDER BY salesorder AND masterproduct ASC") or die(mysql_error()); if(mysql_num_rows($sql) == 0) { echo "
No ORDER/S in Queue
";
} else {
    echo "
    <table width=\"100%\" border=\"0\" cellspacing=\"0\" cellpadding=\"0\" align=\"center\" class=\"data\">
              <tr>
                <td class=\"dataHeader\">Sales Order</td>
                <td class=\"dataHeader\">Sales Order Code</td>
                <td class=\"dataHeader\">Family</td>
                <td class=\"dataHeader\">Product Code</td>
                <td class=\"dataHeader\">Quantity</td>
                <td class=\"dataHeader\">Birth Stamp</td>
                <td class=\"dataHeader\">Due Date</td>
              </tr>
    ";
    while($result = mysql_fetch_array($sql)) {
        echo "
              <tr>
                <td class=\"data\">".$result['salesorder']."</td>
                <td class=\"data\">*".$result['salesorder']."*
".$result['salesorder']."</td> <td class=\"data\">".$result['family']."</td> <td class=\"data\">*".$result['masterproduct']."*
".$result['masterproduct']."</td> <td class=\"data\">"; //need to echo the value here echo "</td> <td class=\"data\">".$result['birthstamp']."</td> <td class=\"data\">*".$result['duedate']."*
".$result['duedate']."</td> </tr> "; } echo "</table>"; } ?>
0
Désolé, je ne comprends pas vraiment ça parce que je suis toujours un noob. Comment fait-on ça?
ajouté l'auteur JudeJitsu, source
Désolé, je ne peux toujours pas l'obtenir. Pouvez-vous s'il vous plaît me dire ce que je dois faire avec mon code? J'apprécierais beaucoup l'aide. :(
ajouté l'auteur JudeJitsu, source
Des bases de données relationnelles ont été créées pour cela. Je suggère de lire sur le fonctions d'agrégat que MySQL prend en charge: dev.mysql.com/doc/refman/5.0/fr/group-by-functions.html
ajouté l'auteur zebediah49, source
Dans ce cas, je suggère de lire ce que mySQL peut faire avec les fonctions d'agrégat, les jointures et les sous-requêtes. Je suis sûr que vous pouvez trouver de bonnes choses vous-même, mais dev.mysql.com /tech-resources/articles/subqueries_part_1.html tizag.com/mysqlTutorial/mysqljoins. PHP devrait vous démarquer.
ajouté l'auteur zebediah49, source

3 Réponses

Enfin compris. Merci les gars d'aider. J'ai changé ma requête SQL à ceci:

$sql = mysql_query("SELECT salesorder, masterproduct, family, birthstamp, duedate, COUNT( * ) AS total FROM report WHERE family = '$family' AND birthstamp BETWEEN '$startDT' AND '$endDT' GROUP BY salesorder, masterproduct, family, duedate  ");

et ça a bien marché!

0
ajouté
SELECT salesorder, family, product, COUNT() AS qty FROM orders 
       GROUP BY salesorder;

EDIT: OK, essayez ceci pour la taille:

SELECT r.*, t.qty FROM report r LEFT JOIN
      (SELECT salesorder, COUNT() AS qty FROM orders 
         GROUP BY salesorder) t
      ON t.salesorder=r.salesorder
    ORDER BY r.salesorder AND r.masterproduct ASC
0
ajouté
Merci pour la réponse rapide, cependant, le problème est que je dois l'insérer dans une autre requête. S'il vous plaît voir ma modification ci-dessus.
ajouté l'auteur JudeJitsu, source
Salut @ zebediah49, Désolé ma modification était en retard. J'ai fondamentalement besoin de le faire avec le code ci-dessus, j'ai mis dans un commentaire où la quantité devrait être faite. aussi je ne suis pas vraiment sûr si ma première requête est correcte pour cette situation
ajouté l'auteur JudeJitsu, source
@ zebediah49, essayé votre requête avec la taille, montre ceci "Vous avez une erreur dans votre syntaxe SQL, consultez le manuel qui correspond à votre version du serveur MySQL pour la bonne syntaxe à utiliser près ') AS qty FROM commandes GROUP BY t.salesorder = r.salesorder ORDER B 'à la ligne 1
ajouté l'auteur JudeJitsu, source
COUNT() AS qty
ajouté l'auteur flowfree, source
Heh, je me suis dit "je vais juste éditer dans ce correctif et ensuite voir que ce commentaire était". Belle prise, même si je l'ai corrigé avant de le lire :)
ajouté l'auteur zebediah49, source
Vous pouvez totalement sous-interroger comme ça, pas de problème. (Je ne vois pas encore de montage)
ajouté l'auteur zebediah49, source
Ah, je vois. Encore une autre caractéristique merveilleuse des bases de données relationnelles: le JOIN : D. Si vous n'êtes pas familier, cela sélectionnera tout à partir du rapport, puis collera sur les quantités tirées de la sous-requête, en utilisant les identités du client pour les faire correspondre.
ajouté l'auteur zebediah49, source

Essayez cette requête:

SELECT 
 COUNT() AS qty, sales_order, family, products 
FROM orders 
GROUP BY sales_order
0
ajouté