我一直困惑于如何将多个MySQL查询合并为一个。我一直拉着我的头发,试图做到以下几点。首先,我做一个查询来获取每个供应商的结果,有多少产品有:当有多行时,如何组合MySQL查询和子查询?
SELECT vendor_name, COUNT(vendor_name) AS cnt FROM products GROUP BY vendor_name
接下来,我只希望那些谁拥有10种或更多产品的供应商,我做了以下PHP IF语句。我不知道如何在上面的SELECT中加入这个,所以我通过PHP来完成。我知道,这是不是最好的,但是当你不知道的最好的方式,你需要做的一些方法:
if ($database_row['cnt']>=10) {
在这个IF语句,然后我做每一个厂商的查询有10个或更多产品:
SELECT id FROM products WHERE vendor_name="'.$database_row['vendor_name'].'"
哪给出了每个产品的ID至少有10个产品的供应商。我知道,这是sl,,但它会产生正确的结果。问题是,我需要所有这一切都在一个查询中,对于我的生活我无法弄清楚。这两个查询都在同一个数据库中,而且它似乎并不是一个复杂的请求,这实际上只是“向我展示那些拥有10个或更多产品的供应商的产品”。
以上可以组合成一个查询吗?目前完整的PHP/MySQL代码如下:
$database_result = @mysql_query('SELECT vendor_name, COUNT(vendor_name) AS cnt FROM products GROUP BY vendor_name',$database_conn);
while($database_row = @mysql_fetch_array($database_result)) {
if ($database_row['cnt']>=10) {
$database_result2 = @mysql_query('SELECT id FROM products WHERE vendor_name="'.$database_row['vendor_name'].'"',$database_conn);
// Process results
}
}
在此先感谢!
下面是完整的单个查询,现在完全按照我的意愿工作。也许有一种巧妙的方式来优化查询,但它工作起来并且看起来足够快。谢谢大家!
SELECT
p3.*
FROM
(
SELECT
p1.id,
p1.department,
p1.end_date,
p1.quantity_sold,
p2.vendor_name
FROM
products p1
INNER JOIN
(
SELECT
vendor_name
FROM
products
GROUP BY
vendor_name
HAVING
COUNT(*) >= 10
) p2
ON
p1.vendor_name = p2.vendor_name
AND
p1.sold_out = 0
AND
p1.end_date > NOW()
ORDER BY
p1.end_date DESC
) AS p3
GROUP BY
p3.vendor_name
ORDER BY
p3.quantity_sold DESC
不知道为什么你有SELECT P3。*和GROUP BY p3.vendor_name。根据我的估算,这将给每个vendor_name一行,但其他信息将不可靠(即,您不能依赖来自哪个产品行)。 – liquorvicar