Задавайте вопросы, мы ответим
Вы не зашли.
Доброго времени суток! В базе информация раскидана по полям: id / field_id / field_key / field_type / field_label / field_value / record_id, нужна выборка по record_id, но с несколькими параметрами (field_value) из field_id.
К примеру: есть база цветов; field_id = 1 - стебель: field_value("значение1") - длинный, короткий / field_id = 2 - цвет: field_value("значение2") - желтый, синий. Нужна выборка цветов, длинные и синие, короткие и желтые. Сейчас (см. код ниже) выводит длинные+синие, т.е. из всех цветов находит отдельно длинные и отдельно синие, и складывает, а нужно - цветы, которые длинные, синие и короткие, желтые.
SELECT COUNT(record_id)
FROM table_name t
WHERE
(field_id,field_value) in ((1,N'значение1'),(2,N'значение2'))
AND EXISTS(
SELECT 1
FROM table_name_cat r
WHERE r.catid = 1 AND r.record_id = t.record_id
);
Помогите пожалуйста
Неактивен
Доброго времени суток. Приведите структуры таблиц ( результаты запросов
SHOW CREATE TABLE `table_name` и SHOW CREATE TABLE `table_name_cat` ), тестовый набор данных (лучше как раз с цветами) и желаемый результат (в виде таблички, а не словесного описания).
Неактивен
`table_name`
field_id field_key field_type field_label field_value record_id
1 a1234567 select цвет желтый 1
2 a89 select стебель длинный 1
1 a1234567 select цвет синий 2
2 a89 select стебель короткий 2
1 a1234567 select цвет синий 3
2 a89 select стебель короткий 3
1 a1234567 select цвет синий 4
2 a89 select стебель короткий 4
`table_name_cat`
id catid record_id
1 1 1
2 1 2
3 1 3
4 1 4
Результат: 1 цветок желтый длинный и 3 цветка синих коротких (не знаю как в виде таблички оформить результат)
Как-то так
Отредактированно M@xim (31.07.2014 11:45:53)
Неактивен
Ну, поехали.
Данные хотелось увидеть вот так :
Неактивен
Запрос для группировки работает отлично, а SELECT record_id,group_concat(field_value ORDER BY 1 ASC) prop FROM `table_name_7155` tn JOIN `table_name_cat_7155` tnc
USING(record_id) GROUP BY record_id HAVING prop IN ('длинный,желтый'); выводит :"MySQL вернула пустой результат (т.е. ноль строк)". И еще вопрос: как быть если категорий несколько, у меня их 70? Заранее спасибо!
Неактивен
С категориями вроде разобрался, использую (SELECT r.record_id FROM table_name_cat AS r WHERE r.catid = 1), но строчки не находит
Отредактированно M@xim (01.08.2014 12:04:56)
Неактивен
Если запрос с группировкой работает, то подберите соответствующий having - чтобы отсеивать ненужное. Насчет 70 категорий - не очень понял вопрос, поясните.
Неактивен
Просто данные разбиты по 70 категориям, т.е. catid содержит значения 1, 2, ... 70 и для выборки из каждой я использую SELECT r.record_id FROM table_name_cat AS r WHERE r.catid = 1(где 1 - номер категории). Здесь вроде сам разобрался
Неактивен
Что касается http://sqlinfo.ru/forum/viewtopic.php?pid=40098#p40098
если не получается отсеять, то приложите дампы таблиц (с тем набором, с которым не можете договориться), будем посмотреть.
Неактивен