есть некая база, из которой выбираются данные (небольшое кол-во за запрос).
необходимо выбрать их так, что бы в итоге получился массив данных, в котором поле name не повторяется ни разу (про distinct знаю, но строки сами по себе не идентичны. повторяется только поле name)
либо оперировать уже со всей выборкой и фильтровать многомерный массив (так сейчас и сделано, рекурсией).
все бы ничего, если бы не большая вложенность циклов и, соответственно, долгое выполнение скрипта и большая нагрузка на сервер.
собственно, вопрос и состоит в том, можно ли только SQL запросом решить эту проблему?
[PHP] [SQL] многомерные массивы
Модератор: Модераторы разделов
-
Voral
- Сообщения: 1205
- ОС: Debian Wheezy (amd64)
Re: [PHP] [SQL] многомерные массивы
Т.е. если имеем:
name value
===== =====
test 10
test2 5
test 11
test2 3
..... ....
test 12
Должны получить что то типа
field1 field2 field3 field4
test 10 11 22
test2 5 3 null
?
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 © ?
When life puts you in tough situations, don’t say "why me". Just say "try me © ?
-
Voral
- Сообщения: 1205
- ОС: Debian Wheezy (amd64)
Re: [PHP] [SQL] многомерные массивы
Если в sql что то типа
Если php
Код: Выделить всё
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 © ?
When life puts you in tough situations, don’t say "why me". Just say "try me © ?
-
Voral
- Сообщения: 1205
- ОС: Debian Wheezy (amd64)
Re: [PHP] [SQL] многомерные массивы
Пожалуй 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 © ?
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] многомерные массивы
если вам всё равно, какая из строк с уникальным 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 4upd.
если речь идёт не об 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
при сбоях форума см.блог
при сбоях форума см.блог