[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: запрос SQL плюс implode
Kusss
сделал вот такой подзапрос, но что-то он не хочет правильно для меня выполняться.
SELECT 
p.color, p.img, p.print_id,
(

SELECT
GROUP_CONCAT(`name`)
FROM
`color`
WHERE
id IN (p.`color`)
)
AS color_name
FROM
`product` AS p
WHERE
p.id = $id

результат
Array
(
[color] => 1,78
[img] => 82er54zfDE.jpg
[print_id] => 373
[color_name] => Белый
)

хотя если запускать просто
SELECT GROUP_CONCAT(  `name` ) 
FROM `color`
WHERE id
IN ( 1,78 )
LIMIT 0 , 30
все хорошо
Белый,Антрацит

помогите победить
Valick
Цитата (Kusss @ 10.02.2016 - 11:13)
id IN (p.`color`)
Kusss
цвет храню строкой.
ниже есть вывод значения p.`color`
Valick
Kusss, нелогично требовать от СУРБД исполнения желаний нарушая первый закон нормализации smile.gif
никаких данных через запятую для работы на уровне СУРБД быть не должно, значение в поле должно быть атомарно

_____________
Стимулятор ~yoomoney - 41001303250491
Kusss
Valick
я это знаю.
ты можешь объяснить почему отдельно запрос работает, а в подзапросе нет ?

P.S. Про твоё отношении к нормализации мы все в курсе. Ты иногда отвечаешь не на вопрос, а что где не правильно. НО не буду же я переписывать ВСЕ ради небольшой задачи, даже если ана должна быть изначальна такой.
kaww
Цитата (Kusss @ 10.02.2016 - 08:44)
почему отдельно запрос работает, а в подзапросе нет ?

потому что условие в запросах не равнозначны, а именно in(1,2,3) не тоже самое, что in('1,2,3')
Цитата (Kusss @ 10.02.2016 - 08:44)
Ты часто отвечаешь не на вопрос

Но это не тот случай. Valick правильно заметил, что в color у тебя не идентификатор, а какая-то ерунда.
ИНСИ
Kusss покажи структуру таблиц.
Guest
Kusss, а ты в дргуом запросе 1,78 в кавычки возьми (что бы было одинаково) и он тоже работать не будет.
Guest
А блин, тебе уже об этом сказали. Пардон.
Юзай FIND_IN_SET короче.
kaww
Kusss, если нет желания/возможности сделать правильно, то в качестве решения приходят в голову всякие извращения, типа таких:
SELECT p.color, p.img, p.print_id, GROUP_CONCAT(c.`name`)
FROM `product` AS p
INNER JOIN `color` AS c ON INSTR(CONCAT(',', p.color , ','), CONCAT(',', c.id, ','))
WHERE p.id = 100
Kusss
kaww
Спасибо, вот теперь все понятно.
Можно сделать через дополнительный запрос, но не хочется. Буду думать.

add:
kaww Ага спасибо, щас попробую.
AllesKlar
Цитата (Kusss @ 10.02.2016 - 10:44)
Ты часто отвечаешь не на вопрос, а что где не правильно.

Хоть и не в моих правилах, но, на мой взгляд, это наилучший способ ответа. Дабы вопрошающий, узрев направление, сам дошел до правильного ответа.

_____________
[продано копирайтерам]
Kusss
FIND_IN_SET( id, p.`color` ) 
вместо
id IN (p.`color`)
работает.
Kusss
AllesKlar и Valick
Я в курсе что у меня это не правильно. Но в данный момент я ничего сделать не могу.
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.