За последние 24 часа нас посетили 19732 программиста и 1656 роботов. Сейчас ищут 1416 программистов ...

MySQL - как сделать результат подзапроса в виде поля

Тема в разделе "Вопросы от блондинок", создана пользователем Mamba, 26 апр 2008.

  1. Mamba

    Mamba Активный пользователь

    С нами с:
    26 апр 2008
    Сообщения:
    1
    Симпатии:
    0
    Никак не могу понять как это сделать. С классами что-то не получается.
    Значения относящиеся к полю 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]
     
  2. lexa

    lexa Активный пользователь

    С нами с:
    22 июл 2007
    Сообщения:
    1.746
    Симпатии:
    0
    Адрес:
    Санкт-Петербург
    [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 ой, перечитал твой пост. Какую-то ты ересь хочешь. Нужно выбирать как стобцы - сделай столбцы.
     
  3. Kreker

    Kreker Старожил

    С нами с:
    8 апр 2007
    Сообщения:
    5.433
    Симпатии:
    0
    Тут двумя запросами, как мне кажется. Ибо 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]

    Только поймите, что это не здоровая идея.
     
  4. DZEN

    DZEN Активный пользователь

    С нами с:
    10 сен 2007
    Сообщения:
    250
    Симпатии:
    0
    Здесь имелось ввиду не три столбца , а как я понял изменяющееся количество столбцов. Самый верный вариант в таком случае CSV. Еще можно написать через классы но это аж муторно писать.
     
  5. armadillo

    armadillo Активный пользователь

    С нами с:
    6 апр 2007
    Сообщения:
    2.380
    Симпатии:
    0
    Адрес:
    Russia, Moscow
    group_concat и т.п.