Помогите с запросом MySQL

A
На сайте с 10.03.2008
Offline
40
820

Вот какую задачу пытаюсь решить. Есть база данных. В ней есть таблица с названием bd_data. В ней имеются много записей содержащих: имя пользователя (user) и значение (value). По одному пользователю может быть несколько записей с одинаковым именем пользователем (user) но с разными значениями (value). Примерно в табличном виде это будет выгялдеть так:


user value
test1 1
test1 1.5
test5 2
test3 0.5
test3 1
test3 3
....

ну и так далее

Задача: нужно сгруппировать запросом записи, отсортировать по значению value пользователей по убыванию и вывести их на экран, т.е. нужно вывести (в таком же порядке):

test3 4.5

test1 2.5

tets5 2

Состряпал запрос, но он не дает желаемого результата, помогите кто может. Вот запрос:


$row = mysql_query("SELECT * FROM bd_data WHERE id='$id_kon' GROUP BY user ORDER BY value DESC");
while ($row1=mysql_fetch_array($row))
{
echo($row1["user"]);
echo($row1["value"]);
}
Сервис активной рекламы (http://mailcasher.info/) Диски почтой (http://www.postcd.ru/)
M3
На сайте с 05.01.2010
Offline
14
#1

просуммировать что ли?

[Удален]
#2

в google "mysql JOIN" поищите.

A
На сайте с 10.03.2008
Offline
40
#3
ma333:
просуммировать что ли?

Проссумировать и вывести результаты в порядке убывания по суммированной колонке

V1
На сайте с 30.03.2006
Offline
52
#4

Читать документацию не пробовали?

SELECT user, sum(value) FROM bd_data WHERE id='$id_kon' GROUP BY user ORDER BY value DESC

skAmZ
На сайте с 04.09.2009
Offline
122
#5


select user, sum(value) from table group by user order by 2 desc
A
На сайте с 10.03.2008
Offline
40
#6
Vladimir1:
Читать документацию не пробовали?
SELECT user, sum(value) FROM bd_data WHERE id='$id_kon' GROUP BY user ORDER BY value DESC

Я этот код и сам знаю. А Вы задание прочитали внимательно. Скажите как такой запрос отсортирует записи по убыванию ВСЕХ значений value у КАЖДОГО пользователя.

Повторю:

начальные данные:


user value
test1 1
test1 1.5
test5 2
test3 0.5
test3 1
test3 3
....

В результате должно быть:


test3 4.5
test1 2.5
tets5 2

Заметьте, что просуммировано и отсортировано по СУММЕ ВСЕХ ЗНАЧЕНИЙ каждого пользовтеля

dvaes
На сайте с 03.09.2007
Offline
65
#7

может как-нибудь

SELECT user, sum(value) as value2 FROM bd_data WHERE id='$id_kon' GROUP BY user ORDER BY value2 DESC

M3
На сайте с 05.01.2010
Offline
14
#8

подзапрос надо

select * from (SELECT user, sum(value) as value2 FROM bd_data WHERE id='$id_kon' GROUP BY user) t order by t.value2, t.user DESC

[Удален]
#9

не надо тут подзапросов

mysql> create table users (`id` varchar(255), i double);
Query OK, 0 rows affected (0.08 sec)

mysql> insert into users (id, i) values ('test1', 1), ('test1', '1.5'), ('test5', 2), ('test3', '0.5'), ('test3', '1'), ('test3', 3);
Query OK, 6 rows affected (0.00 sec)
Records: 6 Duplicates: 0 Warnings: 0

mysql> select * from users;
+-------+------+
| id | i |
+-------+------+
| test1 | 1 |
| test1 | 1.5 |
| test5 | 2 |
| test3 | 0.5 |
| test3 | 1 |
| test3 | 3 |
+-------+------+
6 rows in set (0.00 sec)

mysql> select id, sum(i) as v from users group by id order by v desc;
+-------+------+
| id | v |
+-------+------+
| test3 | 4.5 |
| test1 | 2.5 |
| test5 | 2 |
+-------+------+
3 rows in set (0.00 sec)
A
На сайте с 10.03.2008
Offline
40
#10
dvaes:
SELECT user, sum(value) as value2 FROM bd_data WHERE id='$id_kon' GROUP BY user ORDER BY value2 DESC

Данный код работает должным образом, НО без части:

WHERE id='$id_kon'
ma333:
select * from (SELECT user, sum(value) as value2 FROM bd_data WHERE id='$id_kon' GROUP BY user) t order by t.value2, t.user DESC

Данный запрос тоже работает должным образом, НО опять же без части

WHERE id='$id_kon'
и единственное что DESC нужно применять для сортировки не по пользователю, а по сумме value2

Последний запрос:

So1:
mysql> select id, sum(i) as v from users group by id order by v desc;

Тоже работает, НО тут нет части

WHERE id='$id_kon'

Стоит добавить эту часть как выводит только одного пользователя и без суммирования значения value, т.е. самую первую запись.

Хотя это моя ошибка я не дописал в задаче данный параметр. Усложняем задачу. В таблице имеется еще одна колонка id в которой у разных пользователей имеются значения разные, т.е. исходная таблица уже принимает вид:

user value id

test1 1 15

test1 1.5 15

test5 2 16

test3 0.5 15

test3 1 15

Значение

test3 $id_kon=15, тогда результат запроса должен быть такой:

test3 4.5

test1 2.5

В данном случае пользователь tets5 выпадает из результата, так как у него значение id стоит 16. Так вот. Стоит только все запросы которые приведены выше дополнить отбором по данному полю, как выдает только первую запись и не суммирует значения

andryus добавил 21.10.2010 в 20:59

Все заработало. Просто имел значение регистр символов в самом запросе. Сейчас все заработало. Всем спасибо

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий