Так что я везде искал ответ на этот вопрос, но пока не повезло. Буду признателен за любую оказанную помощь. Я новичок в MySQL (перевод из фонового FileMaker Pro).
У меня есть база данных, где я храню информацию о перспективах нашего бизнеса. У меня есть вопрос о размещении информации для просмотра нашими пользователями. Таблица ЗАПРОС содержит информацию для каждого запроса (то есть, когда поступил запрос, статус запроса и т. Д.). Таблица PROSPECT содержит информацию о каждом потенциальном клиенте (потенциальном клиенте) (то есть имя, фамилия, возраст и т. Д.). Третья таблица , ЗАПРОСЫ , содержит информацию о наших контактах с потенциальным клиентом (то есть о дате следующего контакта, заметках, следующем действии и т. Д.). Каждая из этих таблиц связана с ключом queryID .
Каждый день пользователь будет приходить на экран, где ему будут представлены предложения / запросы, за которыми он / она будет следить в течение этого дня. Это те запросы, дата действий которых меньше или равна сегодняшней. Я хочу, чтобы список содержал queryID , перечисленные имена всех потенциальных клиентов, связанных с этим queryID (макс. 2), и дата действия .
Вот что я пробовал до сих пор:
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";
Возвращает информацию, которую я ищу, но перечисляет только одну перспективу (даже если есть 2 для запроса).
Затем я попытался вставить GROUP_CONCAT (имя) в это, и он дал мне список имен проспекта, перечисленных в строке, разделенных запятыми (я все ближе). Затем я попробовал GROUP_CONCAT (фамилия, ',', имя) и затем GROUP_CONCAT (фамилия, имя), но опять-таки в нем будет указан только один проспект, а не несколько проспектов, разделенных запятыми.
Я хочу, чтобы переменная, которую я назвал fullName в приведенном выше коде, была включена в GROUP_CONCAT, чтобы в возвращаемых строках я видел список всех потенциальных клиентов, связанных с запросом. перечислены и разделены запятой.
Я хочу, чтобы таблица на созданной мной веб-странице имела следующие столбцы:
queryID | имя (а) имени (отчество) | Дата следующего действия
Опять же, пока я могу только получить:
queryID | 1 имя потенциального клиента | Дата следующего действия
Решение может быть чем-то простым, но, поскольку я новичок в MySQL, я потерян.
Пожалуйста, дайте мне знать, если вам нужно больше деталей.
ОБНОВЛЕНИЕ С РЕШЕНИЕМ, НО ПОХОЖИЙ ВОПРОС В КОНЦЕ
Проблема заключалась в том, что некоторые поля имени и фамилии имели значения NULL. По-видимому, GROUP_CONCAT теперь будет работать с нулевыми значениями. Этот запрос, которым я закончил, сработал, как только я избавился от всех значений 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;
Итак, последний вопрос: могу ли я заставить GROUP_CONCAT работать, даже когда он встречает значения NULL?