所以我在我的数据库中有这个表
Item Cat1 Cat2
--------------------
Aaa Red Used
Aaa Blu Used
Bbb Gre New
Bbb Blu New
Ccc Gre New
Ddd Blu Used
Run Code Online (Sandbox Code Playgroud)
我希望在一列中显示有多少项为红色,在另一列中显示新项,如下所示:
Item Red New
-------------------
Aaa 1 0
Bbb 0 2
Ccc 0 1
Ddd 0 0
Run Code Online (Sandbox Code Playgroud)
我知道如何在两个表中显示它们,但不知道如何组合它们.
$query = mysql_query("SELECT *, count(Item) AS CountItem FROM Table WHERE Cat1 = 'Red' GROUP BY Item");
$query2 = mysql_query("SELECT *, count(Item) AS CountItem2 FROM Table WHERE Cat2 = 'New' GROUP BY Item");
while($row = mysql_fetch_array($query) AND $row2 = mysql_fetch_array($query2))
{
echo $row['CountItem'] . " " . $row2['CountItem2'] . " " . $row['Item'];
echo "<br>";
}
Run Code Online (Sandbox Code Playgroud)
这似乎不起作用,因为这只显示标记为Aaa的项目,而我无法理解我在这里做错了什么.
Mic*_*ski 15
这是一份工作SUM(CASE):
SELECT
Item,
SUM(CASE WHEN Cat1 = 'Red' THEN 1 ELSE 0 END) AS Red,
SUM(CASE WHEN Cat2 = 'New' THEN 1 ELSE 0 END) AS New
FROM Table
GROUP BY Item
Run Code Online (Sandbox Code Playgroud)
这里的想法是,对于所有Red行,你分配一个(其他人得到一个0),你加上那些1和0来得到计数.同样的事情New值.
通过利用MySQL的0/1布尔值评估,您可以更简洁地做同样的事情:
SELECT
Item,
SUM(Cat1 = 'Red') AS Red,
SUM(Cat2 = 'New') AS New
FROM Table
GROUP BY Item
Run Code Online (Sandbox Code Playgroud)
在这个例子中,Cat1 = 'Red'如果为真,则返回1,并将它们相加.SUM(CASE)如果其他系统对待他们的布尔值不同,那么该方法将在除MySQL之外的RDBMS上更具可移植性.
只是为了澄清一下,在PHP中你将检索这些$row['Red']和$row['New'].你可以改变的别名,你需要什么:AS Red以AS CountItem使其与原始...
while($row = mysql_fetch_array($query) AND $row2 = mysql_fetch_array($query2)) {
echo $row['Red'] . " " . $row2['New'] . " " . $row['Item'];
echo "<br>";
}
Run Code Online (Sandbox Code Playgroud)