Задавайте вопросы, мы ответим
Вы не зашли.
Есть таблицы
table1
id | name1 | name2 | name3
1
2
3
4
table2
pid | name1
1 Alabama
2 NY
3 LA
table3
mid | name2
1 John
2 Amy
3 Bob
table4
id | name3
1 flying
2 traveling
3 sailing
Нужно получить в результатах при выборке из table1 примерно следующее
1 | flying, traveling | Alabama, LA | John, Bob
2 | sailing, flying | NY, LA | Amy
Порядок результатов в столбцах не важен.
Пока только подумываю об использовании таблицы связей, но без конкретного примера толком сделать не получается
PS! Тип исходных таблиц MyISAM. Кол-во запросов тоже критично.
Неактивен
Таблица, реализующая отношение многие-ко-многим, — это просто два числа.
Например:
Таблица А (id_a, name_a, …)
Таблица B (id_b, name_b, …)
Таблица A2B (id_a, id_b)
Сущности задаются в соответствующих таблицах (в Вашем примере это table2-4),
связи — в таблицах сущность2сущность (их нужно создать).
Неактивен
paulus сделал таблицы как вы указали. получилось 9 штук(много разных данных для одной записи). Можно ли как-то оптимизировать или оставитькак есть?
Также интересует вопрос о самом sql запросе. Пример такого запроса, т.к. через JOIN видимо неравильно я делаю.
Неактивен
SELECT * FROM A JOIN A2B USING (id_a) JOIN B USING (id_b)?
Неактивен
такс... видать где-то я ошибся или что-то не допонял...
таблица countries
cid cn
1 USA
2 American Samoa
3 Honduras
таблица actions
aid aname
1 flying
2 sailing
3 traveling
таблица names
id name name_intl
1 Amy Amy
2 John John
3 Adam Adam
теперь связи
таблица rel_cn
rid rid_cn
1 1
1 2
2 1
3 1
3 2
3 3
таблица rel_actions
rid r_aid
1 2
1 3
2 3
3 1
3 3
в результате нужно получить
id name action countries
1 Amy sailing, traveling USA, American Samoa
2 John traveling USA
3 Adam flying, traveling USA, American Samoa, Honduras
Если использовать вышеприведенный запрос то получаю Unknown column 'rid' in 'from clause'
Отредактированно Globulopolis (01.09.2010 10:46:55)
Неактивен
Ну, да, у Вас же нету колонки rid в names.
Можете вместо USING использовать ON rel_actions.rid = names.id. Ну и
аналогично для других таблиц.
Неактивен
получилось, но не совсем то что ожидалось
вместо
1 Amy sailing, traveling USA, American Samoa
получается
1 Amy sailing USA
результаты сгруппированы по names.id
Неактивен
Не-а, без полного текста запроса не отвечу
Неактивен
Неактивен
Эм. А где группировочные функции?
Возьмите одну вот такую таблицу:
id | value
----------
1 | 1
1 | 2
2 | 3
2 | 4
и поиграйте с группировками с ней:
SELECT id, MAX(value) FROM tablename GROUP BY id;
SELECT id, AVG(value) FROM tablename GROUP BY id;
SELECT id, GROUP_CONCAT(value) FROM tablename GROUP BY id;
Над всеми полями, не входящими в GROUP BY должна стоять группировочная
функция. Иначе MySQL берет одно абстрактное число из соответствующего
поля.
Неактивен
Попробовал группировку. С одной таблицей связей нормально получается, но когда присоединяю ещё таблицы, то группировка идет по одному месту...
т.е.
1 Amy sailing, traveling,sailing, traveling USA, American Samoa
2 John traveling USA
или нельзя так группировать в одном запросе?
Отредактированно Globulopolis (06.09.2010 12:03:31)
Неактивен
Представьте, что перед вами геометрические фигуры разных цветов.
Ваш запрос выглядит так:
«Скажи тип фигуры и перечисли размеры по цветам».
Я бы от такого запроса сошел с ума. MySQL чуть более умный, и не
сходит с ума — но он все равно не понимает, что Вы хотите. Попробуйте
начать с того, что поймете, что Вы хотите получить, для себя. А потом
напишете группировочные функции над всеми полями, которые
не входят в GROUP BY.
Неактивен