2012-12-26 39 views
0

結合的結果和獨立的我有這個疑問:用逗號

SELECT 
    tud.detail_company_name AS company_name, 
    tud.detail_country AS company_country, 
    trv.review_title AS review_title 
FROM users_detail tud 
INNER JOIN users_auth tua 
    ON tud.user_id = tua.user_id 
LEFT JOIN reviews trv 
    ON tud.user_id = trv.review_company_id 
WHERE 
    tua.auth_user_type = "company" OR tua.auth_user_type = "guestcompany" 

查詢工作正常,並返回這樣的結果:

Array 
(
    [0] => Array 
     (
      [company_name] => The Coffee Brewery 
      [company_country] => US 
      [review_title] => 
     ) 
    [1] => Array 
     (
      [company_name] => Crea Nail Art Studio 
      [company_country] => SG 
      [review_title] => 
     ) 
    [2] => Array 
     (
      [company_name] => Hello Mall 
      [company_country] => JP 
      [review_title] => Fake goods! 
     ) 
    [3] => Array 
     (
      [company_name] => Hello Mall 
      [company_country] => JP 
      [review_title] => Never buy in there! 
     ) 
) 

正如你注意到數組鍵2 & 3具有相同company_name但不同review_title。是否有可能必須加入一個結果並用逗號分隔?例如說,這樣的結果:

Array 
(
    [0] => Array 
     (
      [company_name] => The Coffee Brewery 
      [company_country] => US 
      [review_title] => 
     ) 
    [1] => Array 
     (
      [company_name] => Crea Nail Art Studio 
      [company_country] => SG 
      [review_title] => 
     ) 
    [2] => Array 
     (
      [company_name] => Hello Mall 
      [company_country] => JP 
      [review_title] => Fake goods!, Never buy in there! 
     ) 
) 

編輯

如果反應是這樣的:

Array 
(
    [0] => Array 
     (
      [company_name] => The Coffee Brewery 
      [company_country] => US 
      [review_title] => 
      [review_approved] => 
     ) 
    [1] => Array 
     (
      [company_name] => Crea Nail Art Studio 
      [company_country] => SG 
      [review_title] => 
      [review_approved] => 
     ) 
    [2] => Array 
     (
      [company_name] => Hello Mall 
      [company_country] => JP 
      [review_title] => Fake goods! 
      [review_approved] => 1 
     ) 
    [3] => Array 
     (
      [company_name] => Hello Mall 
      [company_country] => JP 
      [review_title] => Never buy in there! 
      [review_approved] => 0 
     ) 
) 

我能不包括0的review_titleGROUP_CONCAT review_approved?所以它會輸出這樣的?

Array 
(
    [0] => Array 
     (
      [company_name] => The Coffee Brewery 
      [company_country] => US 
      [review_title] => 
     ) 
    [1] => Array 
     (
      [company_name] => Crea Nail Art Studio 
      [company_country] => SG 
      [review_title] => 
     ) 
    [2] => Array 
     (
      [company_name] => Hello Mall 
      [company_country] => JP 
      [review_title] => Fake goods! 
     ) 
) 

回答

2

是的。使用GROUP_CONCAT()

SELECT 
    tud.detail_company_name AS company_name, 
    tud.detail_country AS company_country, 
    GROUP_CONCAT(trv.review_title SEPARATOR ',') AS review_titles 
FROM users_detail tud 
INNER JOIN users_auth tua 
    ON tud.user_id = tua.user_id 
LEFT JOIN reviews trv 
    ON tud.user_id = trv.review_company_id 
WHERE 
    tua.auth_user_type = :company OR tua.auth_user_type = :guestcompany 
GROUP BY 
    tud.detail_company_name, 
    tud.detail_country; 
+0

太棒了!一個問題:爲什麼'tud.detail_company_name'&'tud.detail_country'在'GROUP BY'子句中? –

+0

@LeandroGarcia - 這就是'GROUP BY'子句的工作原理。任何未包含在「GROUP BY」中的列都應該是一個聚合函數。您不能在select子句中包含未包含在聚合函數中或GROUP BY子句中的列。你可以在MySQL中做到這一點。但是這不被推薦。 –

+0

您的回答是正確的,但請參閱我的編輯。非常感謝@Mahmoud Gamal。 –