У меня есть две таблицы. Я пытаюсь вернуть значения thumbnail_img и fullsize_img соответствующим значениям для каждой строки article_steps. Я хочу, чтобы это включало NULL, если для каждого шага нет соответствующих значений.MySQL group_concat возвращает значения (включая NULL) из двух таблиц
CREATE TABLE IF NOT EXISTS `article_steps` (
`id` int(5) NOT NULL AUTO_INCREMENT,
`article_id` int(10) NOT NULL,
`step_num` int(3) NOT NULL,
`step_title` char(100) NOT NULL,
`step_body` text NOT NULL,
PRIMARY KEY (`id`),
FULLTEXT KEY `step_body` (`step_body`,`step_title`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=9 ;
CREATE TABLE IF NOT EXISTS `article_steps_gallery` (
`id` int(5) NOT NULL AUTO_INCREMENT,
`article_id` int(5) NOT NULL,
`step_num` int(5) NOT NULL,
`thumbnail_img` text NOT NULL,
`fullsize_img` text NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=21 ;
Вот мое заявление:
SELECT a.id,a.step_num, a.step_title,a.step_body, CONCAT((case when a.step_num=s.step_num then GROUP_CONCAT(fullsize_img, '|',thumbnail_img SEPARATOR ' ') end)) AS images
FROM article_steps a, article_steps_gallery s
WHERE a.article_id=s.article_id
AND a.article_id=2
GROUP BY step_num
Это возвращается:
id step_num step_title step_body images
5 1 faketitle1 fakebody1 NULL
6 2 faketitle2 fakebody2 image.jpg|image_thumbnail.jpg
7 3 faketitle3 fakebody3 NULL
8 4 faketitle4 fakebody4 NULL
Единственный step_num, который должен возвращаться NULL является # 1 --- Однако это правильно только возвращение fullsize_img & thumbnail_img для step_num 2.
SELECT a.step_num, a.step_title,a.step_body, GROUP_CONCAT(DISTINCT fullsize_img) AS image, GROUP_CONCAT(DISTINCT thumbnail_img) AS thumbnail
FROM article_steps a, article_steps_gallery s
WHERE a.article_id=s.article_id
AND a.step_num=s.step_num
AND a.article_id=2
GROUP BY step_num
Это заявление возвращает правильные изображения. Но, поскольку это GROUP_CONCAT, он не возвращает значения NULL. Таким образом, step_num 1, который не имеет никаких изображений, не возвращается.
id step_num step_title step_body image thumbnail
6 2 faketitle2 fakebody2 image2.jpg image2_thumbnail.jpg
7 3 faketitle3 fakebody3 image3.jpg image3_thumbnail.jpg
8 4 faketitle4 fakebody4 image4.jpg image4_thumbnail.jpg
Измените CONCAT на это, чтобы увидеть, если ваши данные установки, как вы думаете, это: 'CONCAT ((случай, когда a.step_num = s.step_num, тогда GROUP_CONCAT (coalesce (fullsize_img, 'Nope'), '|', coalesce (thumbnail_img, 'Nope') SEPARATOR '') end)) ' – xQbert
почему вы соглашаетесь | наряду с разделителем пучка пространств? это похоже на действительно плохую идею. –
xQbert - ваш оператор CONCAT возвращает тот же результат – Unum