SQLinfo.ru - Все о MySQL

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 17.01.2013 22:52:55

lutsk
Участник
Зарегистрирован: 17.01.2013
Сообщений: 15

Помогите составить запрос с объединением

Есть таблица "suggestions":

-------------------------------------
suggestion_id | name | project_author
-------------------------------------
         1        | aaa   |     Vasya       
-------------------------------------
         2        | ccc   |     petya   
-------------------------------------
         3        | bbb   |     Vasya 
---------- --------------------------
         4        | eee   |     Vasya   
-------------------------------------
         5        | ddd   |     petya     
-------------------------------------

и есть таблица "files":

------------------------------
id_file | file_name | suggestion   
------------------------------
    1   | aaaaa.jpg |     3
------------------------------
    2   | bbbbb.jpg |     2
------------------------------
    3   | ccccc.jpg |     1
------------------------------
    4   | ddddd.jpg |     2
------------------------------
    5   | eeeee.jpg |     4
------------------------------
    6   | ggggg.jpg |     3
------------------------------
    7   | kkkkk.jpg |     5
------------------------------
    8   | mmmь.jpg |     2
------------------------------
    9   | ooooo.jpg |     1
------------------------------
   10   | ppppp.jpg |     4
------------------------------

Как составить запрос, чтоб в итоге получилась структура массива:

Vasya_files = array(
    [0] => aaa = array(
        [0] => ccccc.jpg
        [1] => ooooo.jpg
    )
    [1] => bbb = array(
        [0] => aaaaa.jpg
        [1] => ggggg.jpg
    )
    [2] => eee = array(
        [0] => eeeee.jpg
        [1] => ppppp.jpg
    )
)

Другими словами, вытащить все "file_name", принадлежащие "suggestions", которые в свою очередь пренадлежат "Vasya"?

Неактивен

 

#2 17.01.2013 23:02:53

deadka
Администратор
Зарегистрирован: 14.11.2007
Сообщений: 2422

Re: Помогите составить запрос с объединением

Скорее всего структура массива будет немножко другой, но смысл получится тот же.

SELECT `s`.`name`, `f`.`file_name` FROM `suggestions` `s` JOIN `files` `f` ON `s`.`suggestion_id` = `f`.`suggestion` ORDER BY 1;


Зеленый свет для слабаков, долги отдают только трусы, тру гики работают только в консоли...

Неактивен

 

#3 17.01.2013 23:22:38

lutsk
Участник
Зарегистрирован: 17.01.2013
Сообщений: 15

Re: Помогите составить запрос с объединением

Не то. Принт_эр выдал такую структуру:

Array
(
    [0] => Array
        (
            [name] => 111111116
            [file_name] => Upload.rar
        )

    [1] => Array
        (
            [name] => 111111118
            [file_name] => hdfhdad.rar
        )

    [2] => Array
        (
            [name] => 111111118
            [file_name] => Товар.rar
        )

    [3] => Array
        (
            [name] => 111111118
            [file_name] => Paper.rar
        )

    [4] => Array
        (
            [name] => 111111118
            [file_name] => Copia.zip
        )

... ... ...

)
просто отсортированы по [name]

Неактивен

 

#4 17.01.2013 23:35:39

deadka
Администратор
Зарегистрирован: 14.11.2007
Сообщений: 2422

Re: Помогите составить запрос с объединением

Вполне себе то smile. Просто следует сделать дополнительные действия на клиенте, что-то вроде

$result_array = array();
foreach ( $МАССИВ_ПРИВЕДЕННЫЙ_ПРЕДУДУЩИМ_ПОСТОМ_ТОПИКСТАРТЕРА as $cell  ) {
  $result_array[ $cell['name'] ] = $cell['filename'];
}


Зеленый свет для слабаков, долги отдают только трусы, тру гики работают только в консоли...

Неактивен

 

#5 17.01.2013 23:39:21

lutsk
Участник
Зарегистрирован: 17.01.2013
Сообщений: 15

Re: Помогите составить запрос с объединением

Вот вот. И я о том же. Или временную таблицу создавать, что-ли. Но так как в SQL не силён, - вот и прошу помощи. То, что вложенным форичем обходить можно - это я сделал. Но дополнительные запросы при обходе массива - не дело.

Отредактированно lutsk (17.01.2013 23:41:31)

Неактивен

 

#6 17.01.2013 23:41:36

deadka
Администратор
Зарегистрирован: 14.11.2007
Сообщений: 2422

Re: Помогите составить запрос с объединением

А в чем проблема-то так пройти по массиву? MYSQL он возвращает таблицы, а структура, которую Вы хотите не таблица, а нечто посложнее. Плюс опять же - Вы же извлекаете элементы из, можно так сказать, "MySQL" с помощью mysql_fetch_array? Ну так и создавайте массив по ходу, как я Вам написал.


Зеленый свет для слабаков, долги отдают только трусы, тру гики работают только в консоли...

Неактивен

 

#7 17.01.2013 23:56:31

lutsk
Участник
Зарегистрирован: 17.01.2013
Сообщений: 15

Re: Помогите составить запрос с объединением

Сейчас получается такой ход выполнения приложения:
Формирую mysql_fetch_array со значениями  suggestion_id => name, где project_author = Vasya. Форичем обхожу. И при каждой итерации приходится формировать ещё один mysql_fetch_array suggestions => file_name, где suggestions = suggestion_id в родительском фориче.
Вот и думаю, что это не хорошо. Здаётся мне, что такая задача решаема на уровне базы данных.

Отредактированно lutsk (17.01.2013 23:58:38)

Неактивен

 

#8 18.01.2013 04:50:51

deadka
Администратор
Зарегистрирован: 14.11.2007
Сообщений: 2422

Re: Помогите составить запрос с объединением

Так-с... Давайте отделять зерна от плевел - вопросы по php обсуждать здесь не будем (или во всяком случае отложим на попозже). Сервера реляционных баз данных возвращают выборки в ввиде строк, столбцов или таблиц. У Вас есть две таблицы, какую результирующую выборку Вы хотите получить?, приведите ее сюда. В виде таблицы, строки или столбца.


Зеленый свет для слабаков, долги отдают только трусы, тру гики работают только в консоли...

Неактивен

 

#9 18.01.2013 10:38:18

lutsk
Участник
Зарегистрирован: 17.01.2013
Сообщений: 15

Re: Помогите составить запрос с объединением

Видимо все-таки вложенным foreach придется делать. Древовидной структуры не сделать таблицей.

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson