Форум программистов, компьютерный форум, киберфорум
Наши страницы
PHP для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.67/3: Рейтинг темы: голосов - 3, средняя оценка - 4.67
Jampire
32 / 32 / 0
Регистрация: 07.12.2011
Сообщений: 237
1

Нужно построить запрос

03.02.2013, 12:14. Просмотров 532. Ответов 14
Метки нет (Все метки)

Имеем базу со структурой:
id ключ таблицы
user строка
money цифра
Наполнена она множеством строк, в которых повторяется поле user, но всегда разное поле money.
Задача - вывести информацию так, что-бы все значения поля money (сумма) конкретного user вывелись 1 строкой. Как-то так:

user1 1020102
user2 102010
user3 10201
user4 1020
user5 102
user6 10
user7 1

Как я только не пытался, но лучше чем на каждую строку по отдельному запросу я не придумал. Надеюсь что мне помогут тут, или хотя-бы дадут информацию в каком направлении думать. Благодарю.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
03.02.2013, 12:14
Ответы с готовыми решениями:

Нужно построить схемы алгоритмов
Хотя бы для примера с index ом помогите <?php error_reporting(0); echo...

Вывод не того что нужно в ответ на запрос
Здравствуйте...Настраиваю скрипт приема оплаты Robokassa. Уже 2 день ничего не...

Узнать какой post запрос нужно отправить
Есть сайт https://my.tele2.ru/ Там есть форма входа <form...

Php запрос к MYSQL полученные значения нужно передать скрипту javascript
Доброго времени суток такая задача php запрос к MYSQL, полученные значения...

Запрос: 'abc 123 xyz'. Нужно, чтобы EREGI засекла строки, в которых встречаются все эти слова.
Запрос: 'abc 123 xyz'. Нужно, чтобы EREGI засекла строки, в которых...

14
DuxGeneral
103 / 70 / 5
Регистрация: 09.06.2011
Сообщений: 263
03.02.2013, 12:22 2
SQL
1
SELECT `money` FROM `table` WHERE USER='user1'
1
Jampire
32 / 32 / 0
Регистрация: 07.12.2011
Сообщений: 237
03.02.2013, 12:34  [ТС] 3
Да, прошу прощения, действительно таблицу) Опечатался)

Добавлено через 10 минут
Цитата Сообщение от DuxGeneral Посмотреть сообщение
SQL
1
SELECT `money` FROM `table` WHERE USER='user1'
Если речь идет примерно о следующем:
PHP
1
2
3
4
5
6
$result = mysql_query('SELECT * FROM `table`');
while($row = mysql_fetch_array($result)) {
    $result2 = mysql_query('SELECT SUM(money) FROM `table` WHERE user="'.$row["user"].'"');
    $money = mysql_fetch_array($result2);
    echo $row["user"]." - ".$money["money"]."<br>";
}
Возможно и не работает, но думаю смысл Вы поняли.
В данном случае на каждую строку приходится по 1 запросу и когда таких строк в таблице много, а юзеров еще больше... Базе будет не сладко, считаю я.

Возможно ли реализовать это более мягким способом?)
0
DuxGeneral
103 / 70 / 5
Регистрация: 09.06.2011
Сообщений: 263
03.02.2013, 14:03 4
из твоего запроса я понял, что из таблици сначала выбираются юзеры, а потом по каждому юзеру - мани, правильно?
1
Jampire
32 / 32 / 0
Регистрация: 07.12.2011
Сообщений: 237
03.02.2013, 14:06  [ТС] 5
Цитата Сообщение от DuxGeneral Посмотреть сообщение
из твоего запроса я понял, что из таблици сначала выбираются юзеры, а потом по каждому юзеру - мани, правильно?
Да. Но в данном случае получается достаточно хорошая нагрузка. Допустим в таблице 100 значений. Заходит пользователь на страницу и отправляет 101 запрос к базе одним махом.
А если таких пользователей будет 100?
Нужно это как-то по другому сделать.
0
DuxGeneral
103 / 70 / 5
Регистрация: 09.06.2011
Сообщений: 263
03.02.2013, 15:55 6
так а запрос работает? или в чем проблема в оптимизации запроса или вообще в его роботоспособности?
1
Jampire
32 / 32 / 0
Регистрация: 07.12.2011
Сообщений: 237
03.02.2013, 15:59  [ТС] 7
Цитата Сообщение от DuxGeneral Посмотреть сообщение
так а запрос работает? или в чем проблема в оптимизации запроса или вообще в его роботоспособности?
Щас у меня примерно такая конструкция, и она работает:
PHP
1
2
3
4
5
6
7
8
$result = mysql_query('SELECT * FROM `users`'); // временно подключил глобальную таблицу пользователей и ее отсеиваю. Так дубликатов нет.
$arr = array();
while($row = mysql_fetch_array($result)) {
    $money = mysql_fetch_array(mysql_query('SELECT SUM(money) FROM `table` WHERE user="'.$row["username"].'"'))["SUM(money)"]; // вполне нормально вытаскивает сумму колонки
    if ($money > 0) {
        $arr[$row["username"]] = $money; // для удобства заношу всё в массив
    }
}
Проблема лишь в том, что-бы эти запросы уместить в 1, если это возможно.
0
DuxGeneral
103 / 70 / 5
Регистрация: 09.06.2011
Сообщений: 263
03.02.2013, 16:02 8
что касается запроса, то попробуйте запроы с вложеной выборкой (IN), что типа
SQL
1
2
3
SELECT *
FROM `table1`
WHERE `id` = (SELECT `id` FROM `table2` WHERE `name`="T" LIMIT 1)
сделайте рабочий запрос, а потом можна его и оптимизировать
1
Jampire
32 / 32 / 0
Регистрация: 07.12.2011
Сообщений: 237
03.02.2013, 16:22  [ТС] 9
Все-же наверное будет проще разбить это дело на 2 таблицы. Вместо одного большого запроса, будет 1. В данном случае это выгоднее, наверное.

Спасибо за попытку помочь)
0
Robert2k
2 / 2 / 1
Регистрация: 07.08.2012
Сообщений: 15
03.02.2013, 16:43 10
Так?
0
Изображения
 
Jampire
32 / 32 / 0
Регистрация: 07.12.2011
Сообщений: 237
03.02.2013, 17:32  [ТС] 11
Цитата Сообщение от Robert2k Посмотреть сообщение
Да, учитывая что таблица набита значениями:
Gena 150
Gena 100
Gena 50
Pasha 200
Pasha 50
Vasya 200
Petya 150
0
DuxGeneral
103 / 70 / 5
Регистрация: 09.06.2011
Сообщений: 263
03.02.2013, 23:05 12
Цитата Сообщение от Jampire Посмотреть сообщение
будет проще разбить это дело на 2 таблицы.
с двух таблиц все равно нужно длеать объедененный запрос

Добавлено через 1 минуту
SQL
1
2
3
SELECT `money`
FROM `table1`
WHERE `user` = (SELECT `user` FROM `table2`)
0
Jampire
32 / 32 / 0
Регистрация: 07.12.2011
Сообщений: 237
04.02.2013, 04:49  [ТС] 13
Цитата Сообщение от DuxGeneral Посмотреть сообщение
с двух таблиц все равно нужно длеать объедененный запрос

Добавлено через 1 минуту
SQL
1
2
3
SELECT `money`
FROM `table1`
WHERE `user` = (SELECT `user` FROM `table2`)

дело в том, что можно использовать одну таблицу.
в одной таблице есть поля user и money. money нужно сложить и убрать дубликаты user и вывести это как я написал выше.
0
alpex
600 / 575 / 103
Регистрация: 16.07.2012
Сообщений: 1,761
04.02.2013, 06:21 14
SQL
1
SELECT SUM(`money`) AS money, `user` FROM `table` GROUP BY (`user`)
0
Jampire
32 / 32 / 0
Регистрация: 07.12.2011
Сообщений: 237
06.02.2013, 09:38  [ТС] 15
Цитата Сообщение от alpex Посмотреть сообщение
SQL
1
SELECT SUM(`money`) AS money, `user` FROM `table` GROUP BY (`user`)
Нашел уже другой способ, но спасибо)
0
06.02.2013, 09:38
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
06.02.2013, 09:38

Запрос INSERT INTO как построить запрос правильно?
Народ помогите пожалуйста сделать запрос правильно. Имеется таблица users в...

Нужно построить график функций, вычислить и построить диаграмму и сделать легенду.
http://rghost.ru/private/51147973/42d3fdac651f8296a3ad0c7b14f1686e Нужно...

Если нужно сделать запрос на добавление, зачем предварительно делать запрос на выборку?
Есть таблица: ID_записи, поле1, поле2, поле3. Хотелось бы записать запрос на...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru