[PHP] [SQL] многомерные массивы

Модератор: Модераторы разделов

4umodan
Сообщения: 73
ОС: Ubuntu 9.10

[PHP] [SQL] многомерные массивы

Сообщение 4umodan »

есть некая база, из которой выбираются данные (небольшое кол-во за запрос).
необходимо выбрать их так, что бы в итоге получился массив данных, в котором поле name не повторяется ни разу (про distinct знаю, но строки сами по себе не идентичны. повторяется только поле name)
либо оперировать уже со всей выборкой и фильтровать многомерный массив (так сейчас и сделано, рекурсией).
все бы ничего, если бы не большая вложенность циклов и, соответственно, долгое выполнение скрипта и большая нагрузка на сервер.

собственно, вопрос и состоит в том, можно ли только SQL запросом решить эту проблему?
Спасибо сказали:
Аватара пользователя
Voral
Сообщения: 1205
ОС: Debian Wheezy (amd64)

Re: [PHP] [SQL] многомерные массивы

Сообщение Voral »

Т.е. если имеем:
name value
===== =====
test 10
test2 5
test 11
test2 3
..... ....
test 12

Должны получить что то типа
field1 field2 field3 field4
test 10 11 22
test2 5 3 null


?
То что не убивает нас, делает нас сильнее! © Ницше.
When life puts you in tough situations, don’t say "why me". Just say "try me © ?
Спасибо сказали:
Аватара пользователя
Voral
Сообщения: 1205
ОС: Debian Wheezy (amd64)

Re: [PHP] [SQL] многомерные массивы

Сообщение Voral »

Если в sql что то типа

Код: Выделить всё

select name, max(if(<условие1>,value,0) field2, max(if(<условие2>,value,0) field3, max(if(<условие3>,value,0) field4
from table
group by 1


Если php

Код: Выделить всё

    $result=array();
    if ($res=mysql_query("select name, value from table"))
        while ($row = mysql_fetch_assoc($res))
        {
            $result[$row['name']][]=$row['value']; // вторые скобки можно и не пустыми сделать - все зависит от задачи
        };
То что не убивает нас, делает нас сильнее! © Ницше.
When life puts you in tough situations, don’t say "why me". Just say "try me © ?
Спасибо сказали:
Аватара пользователя
Voral
Сообщения: 1205
ОС: Debian Wheezy (amd64)

Re: [PHP] [SQL] многомерные массивы

Сообщение Voral »

Пожалуй php не по задаче получился:

Код: Выделить всё

$result=array();
    if ($res=mysql_query("select name, value from table"))
        while ($row = mysql_fetch_assoc($res))
        {
            $fieldname = <выражение_для_получения _имени_поля>;
            $row[$fieldname] = $row['value'];
            $result[]=$row; // вторые скобки можно и не пустыми сделать - все зависит от задачи
        };
То что не убивает нас, делает нас сильнее! © Ницше.
When life puts you in tough situations, don’t say "why me". Just say "try me © ?
Спасибо сказали:
Аватара пользователя
sash-kan
Администратор
Сообщения: 13939
Статус: oel ngati kameie
ОС: GNU

Re: [PHP] [SQL] многомерные массивы

Сообщение sash-kan »

4umodan писал(а):
20.09.2012 13:45
строки сами по себе не идентичны. повторяется только поле name
если вам всё равно, какая из строк с уникальным name попадёт в выдачу, используйте group by
было:

Код: Выделить всё

select * from table;
name value1 value2
a    1      2
a    3      4
a    5      6
стало:

Код: Выделить всё

select * from table group by name;
name value1 value2
a    3      4


upd.
если речь идёт не об sql, а о конкретной реализации, то есть нюансы·
например, в mysql есть агрегирующая функция group_concat:

Код: Выделить всё

select name, group_concat(value1), group_concat(value2) from table group by name;
name value1 value2
a    1,3,5  2,4,6
возможно, такой вариант вам больше подойдёт·
Писать безграмотно - значит посягать на время людей, к которым мы адресуемся, а потому совершенно недопустимо в правильно организованном обществе. © Щерба Л. В., 1957
при сбоях форума см.блог
Спасибо сказали: