MySQL-在GROUP BY查询中遇到COUNT()问题

西普里亚尼

我有一个很大的查询,ajax调用将其用于返回并对活动项进行排序。根据我的理解,应尽可能避免子查询,并且由于该查询会被频繁调用,因此我想这样做。

目前一切都很好,除了了COUNT(b.bic) AS bids如果有两(2)个出价,则查询返回四(4),如果有4,则返回8,依此类推。我试过按其他列分组...但是没有运气。

一些桌子。我希望每个列名都可以自我解释:

country_ship-每个项目都可以运送到多个国家/地区,因此item_id可以重复。

id  item_id country_id  ship_cost

国家

id  country_code    country_name

item_expire-不确定item_expire是否应具有自己的表。

id  item_id exp_date

出价-与country_ship一样,item_id可以重复。这是投标的存储位置。

id  item_id  user_id  bid previous_bid  bid_date

查询:

$q = $this->db->mysqli->prepare("
SELECT c.ship_cost, 
 c.item_id, 
 co.country_name, 
 co.id AS co_id,
 i.id, 
 i.user_id, 
 i.item_start, 
 i.item_title, 
 i.item_number, 
 i.item_year, 
 i.item_publisher, 
 i.item_condition, 
 i.item_description, 
 i.item_location, 
 e.exp_date AS exp_date, 
 i.active, 
 CAST(u.fb_id AS CHAR(50)) AS fb_id, 
 u.user_pic, 
 MAX(b.bid) AS maxbid, 
 COUNT(b.bid) AS bids, 
 p.publisher_name, 
 t.tag_name
FROM countries_ship c
JOIN items i
 ON c.item_id = i.id
JOIN item_expire e
 ON c.item_id = e.item_id
JOIN users u
 ON i.user_id = u.id
LEFT JOIN bids b
 ON i.id = b.item_id
LEFT JOIN publishers p
 ON i.item_publisher = p.id
LEFT JOIN tags_rel tr
 ON c.item_id = tr.item_id
JOIN tags t
 ON t.id = tr.tag_id
LEFT JOIN countries co
 ON i.item_location = co.id
WHERE ".$where."
GROUP BY c.item_id ORDER BY ".$order." ".$limit."");
阿基尔

你可以试试

COUNT(distinct b.bic) AS bids

这将忽略由于连接导致的重复

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章