сделал вот такой подзапрос, но что-то он не хочет правильно для меня выполняться.
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
10.02.2016 - 12:24
Цитата (Kusss @ 10.02.2016 - 11:13) |
id IN (p.`color`) |
цвет храню строкой.
ниже есть вывод значения p.`color`
Valick
10.02.2016 - 12:38
Kusss, нелогично требовать от СУРБД исполнения желаний нарушая первый закон нормализации
никаких данных через запятую для работы на уровне СУРБД быть не должно, значение в поле должно быть атомарно
_____________
Стимулятор ~yoomoney - 41001303250491
Valick
я это знаю.
ты можешь объяснить почему отдельно запрос работает, а в подзапросе нет ?
P.S. Про твоё отношении к нормализации мы все в курсе. Ты иногда отвечаешь не на вопрос, а что где не правильно. НО не буду же я переписывать ВСЕ ради небольшой задачи, даже если ана должна быть изначальна такой.
Цитата (Kusss @ 10.02.2016 - 08:44) |
почему отдельно запрос работает, а в подзапросе нет ? |
потому что условие в запросах не равнозначны, а именно in(1,2,3) не тоже самое, что in('1,2,3')
Цитата (Kusss @ 10.02.2016 - 08:44) |
Ты часто отвечаешь не на вопрос |
Но это не тот случай. Valick правильно заметил, что в color у тебя не идентификатор, а какая-то ерунда.
Kusss покажи структуру таблиц.
Kusss, а ты в дргуом запросе 1,78 в кавычки возьми (что бы было одинаково) и он тоже работать не будет.
А блин, тебе уже об этом сказали. Пардон.
Юзай FIND_IN_SET короче.
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
kaww
Спасибо, вот теперь все понятно.
Можно сделать через дополнительный запрос, но не хочется. Буду думать.
add:
kaww Ага спасибо, щас попробую.
AllesKlar
10.02.2016 - 13:10
Цитата (Kusss @ 10.02.2016 - 10:44) |
Ты часто отвечаешь не на вопрос, а что где не правильно. |
Хоть и не в моих правилах, но, на мой взгляд, это наилучший способ ответа. Дабы вопрошающий, узрев направление, сам дошел до правильного ответа.
_____________
[продано копирайтерам]
FIND_IN_SET( id, p.`color` )
вместо
id IN (p.`color`)
работает.
AllesKlar и Valick
Я в курсе что у меня это не правильно. Но в данный момент я ничего сделать не могу.
Быстрый ответ:
Powered by dgreen
Здесь расположена полная версия этой страницы.