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

それは機能するはずです(null以外の値をカウントするため)が、とにかくそのテーブルからすべてのレコードを返すように見えるので、レコードをグループ化して取得する方法がわかりません。

すべての行に使用できるカウントが必要な場合は、とにかく 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 に答える