Никак не могу понять как это сделать. С классами что-то не получается. Значения относящиеся к полю main.id_data должны выбираться не отдельно, а в одной строке вместе с полем main.name [sql] CREATE TABLE `main` ( `id_data` int(11) unsigned NOT NULL auto_increment, `name` text, PRIMARY KEY (`id_data`) ) ENGINE=MyISAM; INSERT INTO main VALUES(NULL, 'Just some text'); CREATE TABLE `data_values` ( `data_id` int(11) unsigned NOT NULL default '0', `value_id` tinyint(3) unsigned default NULL, `value` int(11) unsigned default NULL, UNIQUE KEY `unica` (`data_id`,`value_id`) ) ENGINE=MyISAM; INSERT INTO data_values VALUES(1, 1, 1111); INSERT INTO data_values VALUES(1, 2, 2222); INSERT INTO data_values VALUES(1, 3, 3333); [/sql] Желаемый результат: [sql] ---------------------------------------------------------------------- |`name` | `data_value_1` | `data_value_2` | `data_value_3` | ---------------------------------------------------------------------- |'Just some text' | 1111 | 2222 | 3333 | ---------------------------------------------------------------------- [/sql]
[sql]select * from main, data_values where main.id_data = data_values.data_id[/sql] или [sql]select * from main left join data_values on (data_values.data_id = main.id_data)[/sql] upd ой, перечитал твой пост. Какую-то ты ересь хочешь. Нужно выбирать как стобцы - сделай столбцы.
Тут двумя запросами, как мне кажется. Ибо mysql не обрабатывает запросы, которые требуют возвращения разного кол-ва рядов данных из разных таблиц в одну строку. А если же заранее известно, что data_value будет всего три, то можно попробывать так (только не говорите, что я извращенец): [sql] SELECT `main` . * , ( SELECT `data_values`.`value` FROM `data_values` WHERE `data_values`.`data_id` = `main`.`id_data` AND `data_values`.`value_id` =1 ), ( SELECT `data_values`.`value` FROM `data_values` WHERE `data_values`.`data_id` = `main`.`id_data` AND `data_values`.`value_id` =2 ), ( SELECT `data_values`.`value` FROM `data_values` WHERE `data_values`.`data_id` = `main`.`id_data` AND `data_values`.`value_id` =3 ) FROM `main` ; 1, 'Just some text', 1111, 2222, 3333[/sql] Только поймите, что это не здоровая идея.
Здесь имелось ввиду не три столбца , а как я понял изменяющееся количество столбцов. Самый верный вариант в таком случае CSV. Еще можно написать через классы но это аж муторно писать.