Задавайте вопросы, мы ответим
Вы не зашли.
Приветствую форумчан, подскажите пожайлуста, как реализовать.
Есть три таблицы:
1. view (отвечает за добавление просмотров профиля)
id | id_current | id_view | datetime (ID, ID юзера, ID посмотревшего профиль, время)
1 | 1 | 2 | 2013-01-31 10:21:49
2. contact (таблица с данными юзера - изменять структуру таблицы нельзя)
id | name | birthday | photo
1 | admin | 1980-05-05
3. contact_data (дополнительная таблица с доп. параметрами пользователя, которые он добавил)
id | contact_id | field | value (ID, ID юзера, field название параметра, value сам параметр)
1 | 1 | url | http://ya.ru
2 | 1 | about | Вася
3 | 2 | url | http://ya.ru
4 | 2 | sex | m
5 | 2 | ... | ...
url - заполнен присутствует
В таблице №3 могут быть разные данные field в зависимости от того, какие поля заполнил юзер, может вообще ничего не заполнить (кроме URL).
Использую JOIN LEFT
Отредактированно treamz (31.01.2013 17:28:56)
Неактивен
1. Зачем таблицам view и contact_data поле id?
2. По вашему вопросу - вы сначала делаете join, а потом говорите отдать только те строки, у которых AND e.field = 'sex' - результат закономерный. Нужно сначала выбрать из таблицы contact_data те строки у которых e.field = 'sex', а потом джоинить. Например, с помощью подзапроса или поместив условие в части ON.
3. Чтобы не делать кучу left join, можно подзапросом с группировкой выбрать нужные данные из таблицы contact_data и сделать один раз left join.
Неактивен
1. кстати да, он тут не нужен
2-3 Vasya не могли бы подсказать синтаксис
Спасибо
Неактивен
Синтаксис нашел
LEFT JOIN wa_contact_data e ON (v.id_view = e.contact_id AND e.field = 'sex')
Подскажите как упростить и не использовть 5 JOIN одной таблицы, спасибо!
Неактивен
что-то типа
..left join (select contact_id, group_concat(concat('параметр ', field, ' значение ', value)) from contact_data group by 1) t ON ..
Но в этом случае параметры и их значения будут в одном поле.
Неактивен