2013-04-09 115 views
0

对于我几乎已完成的几个表,我有一个相当复杂的查询。最后一个方面涉及汇总项目收到的出价数量,但我正在为特定部分的所有项目进行此操作。该查询工作正常,除了它只返回1行时,我尝试和聚合(/ * * /)添加到查询。阅读它似乎我需要一个子查询,除了我不完全确定如何去做这件事。这是查询日期:Mysql COUNT子查询

SELECT s.id as section_id, s.name as section, i.id as item_id, 
i.title as item_title, item.location_id as item_location_id, 
i.slug as item_slug, i.description as item_description, 
i.price as item_price, UNIX_TIMESTAMP(i.date_added) as item_date_added, 
c.id, c.city, c.particular_id, p.id, p.particular /*,COUNT(o.i_id) as interest*/ 

FROM section as s 
INNER JOIN item as i 
ON s.id = i.section_id 
INNER JOIN city as c 
ON i.location_id = c.id 
INNER JOIN particular as p 
ON c.particular_id = p.id 

/*LEFT JOIN offer as o 
ON o.job_id = i.id*/ 

WHERE s.id = 2 

的代码在它返回我的预期,直到引进了/ * * /代码,它现在只返回1行的所有行。

你可以给我任何帮助,将不胜感激

感谢

强尼

回答

1

应该解决您的问题:

SELECT s.id as section_id, s.name as section, i.id as item_id, 
    i.title as item_title, item.location_id as item_location_id, 
    i.slug as item_slug, i.description as item_description, 
    i.price as item_price, UNIX_TIMESTAMP(i.date_added) as item_date_added, 
    c.id, c.city, c.particular_id, p.id, p.particular, 
    (SELECT COUNT(o.i_id) FROM offer AS o ON o.job_id = i.id) AS interest 
FROM section as s 
INNER JOIN item as i 
    ON s.id = i.section_id 
INNER JOIN city as c 
    ON i.location_id = c.id 
INNER JOIN particular as p 
    ON c.particular_id = p.id 
WHERE s.id = 2 
+0

我发现查询没有工作,但这一微小变化所做的:(SELECT COUNT(o.i_id)从招募邻LEFT JOIN项目作为我邻。 job_id = i.id)兴趣爱好 - 这看起来合适吗? 感谢你们俩。 – Jonnny 2013-04-09 03:36:02

+0

对不起队友,我没有db来测试。但是,是的,整个事情的想法是使用子查询而不是连接。 ;-) – medina 2013-04-09 03:39:19

+0

不用担心,谢谢你的帮助! – Jonnny 2013-04-09 03:42:48

3

你必须有分组依据,如果你正在做的集合体,如:

 SELECT s.name, COUNT(i.id) 
     FROM section as s 
INNER JOIN item as i 
    GROUP BY s.name 

将返回部分名称和在其中找到的项目数量。