1

我试图在下面的查询中添加表 t4 的计数,而不限制结果。就像是:

 COUNT(t4.offer_to_purchase_id) AS count

但这将结果限制为仅出现在 t4 中的那些服务,尽管有左连接

$sql = "SELECT s.*, q.categories, t4.*, payments.*, quotes.*
      FROM services s

      LEFT JOIN 
       (
      SELECT sc.service_id, GROUP_CONCAT(c.name) categories
        FROM services_categories sc JOIN categories c 
          ON sc.cat_id= c.cat_id
       GROUP BY sc.service_id
       ) q ON s.service_id = q.service_id

      LEFT JOIN offers_to_purchase t4
      ON s.service_id = t4.service_id 
      LEFT JOIN quotes ON quotes.service_id = s.service_id
      LEFT JOIN payments ON payments.service_id = s.service_id
      WHERE s.user_id = $user_id";

我怎样才能做到这一点?

4

1 回答 1

3

它应该可以工作(因为它将计算非空值),但不确定如何对记录进行分组以获取它,因为无论如何您似乎都在返回该表中的所有记录。

如果您想要一个可用于所有行的计数,同时从 t4 取回行,您可以执行以下操作:-

$sql = "SELECT s.*, q.categories, t4.*, payments.*, quotes.*, t4_2.id_count
      FROM services s

      LEFT JOIN 
       (
      SELECT sc.service_id, GROUP_CONCAT(c.name) categories
        FROM services_categories sc JOIN categories c 
          ON sc.cat_id= c.cat_id
       GROUP BY sc.service_id
       ) q ON s.service_id = q.service_id

      LEFT JOIN offers_to_purchase t4
      ON s.service_id = t4.service_id 
      LEFT OUTER JOIN 
      (
        SELECT service_id, COUNT(offer_to_purchase_id) AS id_count FROM offers_to_purchase GROUP BY service_id
      ) t4_2
      ON s.service_id = t4_2.service_id
      LEFT JOIN quotes ON quotes.service_id = s.service_id
      LEFT JOIN payments ON payments.service_id = s.service_id
      WHERE s.user_id = $user_id";
于 2013-07-14T20:47:53.380 回答