Помогите с составлением запроса

Тема в разделе "Базы данных", создана пользователем Matinier, 19 авг 2010.

Статус темы:
Закрыта.
Модераторы: latteo
  1. Matinier

    Matinier Постоялец

    Регистр.:
    5 окт 2009
    Сообщения:
    65
    Симпатии:
    4
    Здравствуйте!
    Есть таблица с записями вида:

    1 | Петя | яблоко
    2 | Петя | груша
    3 | Петя | апельсин
    4 | Вася | яблоко
    5 | Вася | арбуз

    Помогите, пожалуйста, составить запрос для получения следующего результата:

    Петя | яблоко, груша, апельсин
    Вася | яблоко, арбуз
     
  2. polyetilen

    polyetilen Заблокирован

    Регистр.:
    10 авг 2006
    Сообщения:
    814
    Симпатии:
    474
    Код:
    SELECT name, GROUP_CONCAT(fruit)
    FROM fruit
    GROUP BY name
    
     
    Matinier нравится это.
  3. Matinier

    Matinier Постоялец

    Регистр.:
    5 окт 2009
    Сообщения:
    65
    Симпатии:
    4
    Благодарю. Сделал так, но добавил пробелы после запятых и сделал только не повторяющиеся фрукты в списке:

    Код:
    SELECT name, GROUP_CONCAT( DISTINCT fruit SEPARATOR ', ' )
    FROM fruit
    GROUP BY name
     
  4. horpah

    horpah

    Регистр.:
    21 июн 2010
    Сообщения:
    200
    Симпатии:
    55
    Структура таблицы не совсем оптимальная. Дело в том что здесь для каждого фрукта дублируется Имя человека
    1 | Петя | яблоко
    2 | Петя | груша
    3 | Петя | апельсин
    При таком подходе размер БД будет заметно больше оптимального. Эту БД целесообразно было бы реализовать так:

    таблица1:
    id| name |
    1 | Петя |
    2 | Вася |

    таблица2:
    id|nameID| Fruit
    1 | 1 | яблоко
    2 | 1 | груша
    3 | 1 | апельсин
    4 | 2 | яблоко
    5 | 3 | арбуз
    И тогда запрос:
    SELECT T1.*,T2.* FROM таблица1 T1 LEFT JOIN таблица2 T2 ON T1.name=T2.nameID WHERE.......

    Принцип таков: если некоторая сущность (у тебя было имя) может иметь несколько признаков (у тебя были фрукты), то для признаков отводится отдельная таблица, которая имеет некий идентификатор сущности (id). Присоединяются все признаки по LEFT JOIN. Результат лучше привести к нужному тебе виду уже при обработке в скрипте или программе.

    Как видишь нет необходимости дублировать по несколько раз информацию с длинным именем, достаточно ID (как правило хватает обычного int который равен 4 байта). А представь, если бы в твоей таблице был 4-й столбец, в котором был некий текст(например биография этого человека), сколько бы лишнего места ушло из-за необходимости его многократно дублировать только из-за того, что у васи есть и апельсин и груша.
     
  5. Matinier

    Matinier Постоялец

    Регистр.:
    5 окт 2009
    Сообщения:
    65
    Симпатии:
    4
    Благодарю за совет, однако на стуктуру описанной в топике таблицы (как и на БД в целом) повлиять возможности нет.
    Меня интересовал запрос для выборки данных - корректный ответ я получил.
    Тему можно закрывать.
     
  6. barabula

    barabula Нарушитель

    Регистр.:
    21 май 2009
    Сообщения:
    470
    Симпатии:
    77
    Люди подскажите вот имея доступ к MySQL как можно залить в него php файл?
     
  7. zerdek

    zerdek

    Регистр.:
    29 ноя 2007
    Сообщения:
    346
    Симпатии:
    50
    не корректный вопрос...

    хотя залить можно вот так:
    insert into table1(php_field) values('<?php //some code ?>');
     
  8. kolum

    kolum Писатель

    Регистр.:
    31 мар 2008
    Сообщения:
    8
    Симпатии:
    0
    Залить файл в базу?
     
  9. barabula

    barabula Нарушитель

    Регистр.:
    21 май 2009
    Сообщения:
    470
    Симпатии:
    77
    нет, просто есть сайт к которому есть достук к БД, мне нужно на этот сайт залить пхп файл в корень сайта, реально ли это сделать?
    это при учёте того что регистр_глобал офф
     
Статус темы:
Закрыта.