Ich habe die folgenden Tabellen:linken JOIN funktioniert nicht wie
store_list
id store
1 m1
2 m2
3 m3
Shop-Name jeder Speichername für die verkauften Produkte seinen eigenen Tisch haben, mit dem Inhalt wie folgt:
s_m1_sales
id item qty date
1 x1 5 16-5-2016
2 x2 6 16-5-2016
3 x3 1 16-5-2016
s_m2_sales
id item qty date
1 x2 3 16-5-2016
2 x2 3 16-5-2016
3 x2 5 16-5-2016
und so weiter für den 3. Laden ...
Und für die letzte Tabelle:
store_items
id item qty cat sub
10 x1 15 lady slip
11 x2 10 lady shoe
12 x3 10 lady shoe
Jetzt I‘ Ich suche nach einem Bericht, um zu finden, wie viele Artikel mit verkauft wurden in einem bestimmten Datum für eine bestimmte Kategorie (Katze) UND gruppiert nach Kategorie. Ich brauche etwas zu sehen wie folgt aus:
cat sub M1 M2 M3 date
lady slip 5 0 0 16-5-2016
lady shoe 7 11 0 16-5-2016
Mein PHP-Code, habe ich LINKE als richtig JOIN und Ausgabeergebnis verwendet:
//rest of code
//Table created
echo "<table width=90% height=% align=center border=1 cellpadding=3 cellspacing=0>";
echo "<tr>
<td align=center width=12%><b>Supplier</b></td>
<td align=center width=12%><b>Category</b></td>
<td align=center width=12%><b>Sub-Category</b></td>
";
foreach($allstore as $store => $value){
echo "<td align=center width=5%><b><font color=green size=+1>".$value."</font></b></td>";
}
//$allstore is an array , by which values taken from user checkbox select
$allstore = $_POST['store'];
foreach($allstore as $store => $value){
$query = "SELECT s_{$value}_sales.item_no,
store_items.cat,
store_items.supplier,
store_items.sub,
SUM(s_{$value}_sales.qty) AS a1
FROM s_{$value}_sales
LEFT JOIN store_items ON s_{$value}_sales.item_no = store_items.item_no
AND store_items.cat = '".$_POST['cat']."'
AND s_{$value}_sales.date BETWEEN '".$_POST['fdate']."' AND '".$_POST['tdate']."'
AND store_items.store = '".$value."'
GROUP by store_items.sub
";
$result= mysql_query($query);
while($row = mysql_fetch_assoc($result)) {
echo "<tr><td align=center width=12%>{$row['supplier']}</td>
<td align=center width=12%>{$row['cat']}</td>
<td align=center width=12%>{$row['sub']}</td>
<td align=center>".$row['a1']."</td>
";
}
}
echo "</tr></table>";
//rest of code..
Wie ich bereits erwähnt, ist die Ausgabe korrekt ist, aber was passiert, dass es Kategorien und Unterkategorien mehrfach wiederholt. Ich will nicht, dass ich Geschäfte und seine Summenmengen in jeder Spalte auflisten will. Wie kann ich es tun ?
Die obige PHP Ausgabe wie folgt:
cat sub M1 M2 M3
lady slip 5
lady shoe 7
lady slip 0
lady shoe 11
lady slip 0
lady shoe 0
Mit Ihrem aktuellen Schema, müssen Sie eine einzelne Abfrage mit drei linken verbindet, eine an jeder Speicher Tabellenspalte. Sie versuchen, drei separate Abfragen auszuführen, die zu zusätzlichen Zeilen anstelle von zusätzlichen Spalten führen. –
Das funktioniert, wenn Sie nur 3 Geschäftstabellen haben und niemals irgendwelche Geschäfte hinzufügen oder entfernen. Wenn es sich um ein Schulprojekt mit genau 3 Tischen handelt und es sich nicht ändern wird, dann ist dies eine gute Option. Das ist, es sei denn, der Lehrer bewertet die Flexibilität des Codes. Wenn dies ein Problem der realen Welt ist, würde ich stattdessen die Änderung der Tabellenstruktur empfehlen. – ghenghy
Sie verwenden Datenbankcode, der seit 5 Jahren nicht mehr verwendet wird und in aktuellen PHP-Versionen nicht mehr funktionsfähig ist. Alternative Datenbank-APIs wie PDO gibt es seit über einem Jahrzehnt. Beenden Sie die Verwendung von mysql_query() '! – miken32