1

だから私はこれに対する答えをどこでも探しましたが、今のところ運がありません. どんな助けでも大歓迎です。私はmysqlを初めて使用します(filemaker proのバックグラウンドから転送)。

私は、ビジネスの見込み客の情報を保持するデータベースを持っています。ユーザーに表示するリスティング情報について質問があります。INQUIRY テーブルには、各問い合わせの情報が保持されます (つまり、問い合わせの日付、問い合わせのステータスなど)。PROSPECT テーブルには、各見込み客 (見込み客) に関する情報(名、姓、年齢など) が保持されます。3 番目のテーブル INQUIRYNOTESには、見込み客との連絡先に関する情報が保持されます (つまり、次の連絡日、メモ、次のアクションなど)。これらの各テーブルは、キーinquiryIDに関連付けられています。

毎日、ユーザーは画面に来て、その日にフォローアップする見込み客/問い合わせが表示されます。これは、アクションの日付が今日以下の問い合わせです。リストには、inquiryIDそのinquiryID に関連するすべての見込み客のリスト名(最大 2 つ)、およびaction dateを含めたいと考えています。

これが私がこれまでに試したことです:

SELECT inquiry.inquiryID,
   CASE WHEN prospect.lastName = '' THEN prospect.firstName
   WHEN prospect.firstName = '' THEN prospect.lastName
   ELSE CONCAT(prospect.lastName, ', ',prospect.firstName) END as fullName, inquiryNote.actionDate
FROM inquiry, prospect, inquiryNote
WHERE inquiry.inquiryID = prospect.inquiryID
AND inquiry.inquiryID = inquirynote.inquiryID
AND inquirynote.actionDate != \"0000-00-00\"
AND actionDate <= \"".date("Y-m-d")."\"
GROUP BY inquiryID ORDER BY actionDate";

これは私が探している情報を返しますが、見込客の 1 つしかリストされません (問い合わせに 2 つある場合でも)。

次に、これに GROUP_CONCAT(firstname) を入れてみたところ、コンマで区切られた行にリストされたプロスペクトの名のリストが得られました (私は近づいています)。次に、GROUP_CONCAT(last name, ', ', firstname) と GROUP_CONCAT(lastname,firstname) を試しましたが、ここでも 1 つのプロスペクトのみがリストされ、コンマで区切られた複数のプロスペクトはリストされません。

上記のコードでfullNameという名前を付けた変数をGROUP_CONCAT に含めて、返された行に、問い合わせに関連するすべての見込み客のリストが表示され、カンマで区切られていることを確認したいと考えています。

作成した Web ページのテーブルに次の列が必要です。

お問い合わせID | 見込み客の名前 (姓が先) | 次の行動日

繰り返しますが、これまでのところ、取得できるように見えるのは次のとおりです。

お問い合わせID | 1 人の見込み客の名前| 次の行動日

解決策は簡単かもしれませんが、私はmysqlに慣れていないので迷っています。

詳細が必要な場合はお知らせください。


解決策で更新しますが、最後に同様の質問があります


問題は、姓と名のフィールドの一部に NULL 値が含まれていたことです。どうやら、GROUP_CONCAT は null 値で機能するようになりました。これは、すべての NULL 値を取り除くと機能した、終了したクエリです。

SELECT 
  inquiry.inquiryID, 
  inquiry.initialDate,
  inquiryNote.actionDate,
  GROUP_CONCAT(DISTINCT
    CONCAT(
      CASE WHEN prospect.lastName = '' THEN prospect.firstName
      WHEN prospect.firstName = '' THEN prospect.lastName
       ELSE CONCAT(
        prospect.firstName, ' ',prospect.lastName
      ) END
    ) SEPARATOR ', '
  ) AS prospectList,

GROUP_CONCAT(DISTINCT
    CONCAT(
      CASE WHEN influencer.lastName = '' THEN influencer.firstName
      WHEN influencer.firstName = '' THEN influencer.lastName
      ELSE CONCAT(
        influencer.firstName, ' ',influencer.lastName
      ) END
    ) SEPARATOR ', '
  ) AS influencerList

FROM inquiry, prospect, inquiryNote, influencer WHERE inquiry.inquiryID = prospect.inquiryID
AND inquiry.inquiryID = inquirynote.inquiryID
AND inquiry.inquiryID = influencer.inquiryID
AND inquirynote.actionDate != "0000-00-00" AND actionDate <= "2011-09-22"
GROUP BY inquiryID
ORDER BY actionDate;

最後の質問は、NULL 値に遭遇した場合でも GROUP_CONCAT を機能させることができるかということです。

4

2 に答える 2

1

NULL が含まれている場合は、列を結合できます。

COALESCE(lastname, '') は、lastname が null の場合は空の文字列を返し、そうでない場合は lastname の値が何であれ返します。

于 2011-09-23T01:35:14.503 に答える
0

GROUP_CONCAT は単に NULL 値を無視 (スキップ) しますhttp://thinkdiff.net/mysql/mysql-the-group_concat-function/

于 2014-07-14T20:05:15.113 に答える