Събиране от база данни

bganonymous

Registered
Здравейте! :) Имам база данни `random_points`, където при натискане на бутон се добавя нов ред в базата данни (id - id-то, user - името на потребителя и points - случайно число).

Как мога да направя заявка, която да събере всички взети точки до момента и да ги изпише?

25f441a96d2be9b6.png
 
Искаш да събереш за всеки един потребител поотделно точките или на всички потребители общо точките ?
 
sentenello каза:
Искаш да събереш за всеки един потребител поотделно точките или на всички потребители общо точките ?
На всеки един потребител поотделно точките.
 
Еми добре де, за WHERE чувал ли си ? :shock: Сложи едни Where и готово, няма нищо сложно. :wink:

Код:
SELECT SUM(column_name) FROM table_name WHERE user=nqkaftam
 
bganonymous каза:
Това го пробвах, но не успях да се справя... :(
С кое не си се справил? Защо да не работи? Грешки извежда ли нещо?
[sql]
SELECT user,SUM(points) FROM table_name WHERE user=test
[/sql]

Селектирайте и полето user не само сумирането на полето поинтс. :)
 
[sql]
SELECT `username`, SUM(`points`) AS points
FROM `users`

GROUP BY `username`
[/sql]


Ако искаш само за конкретен потребител, между FROM `users` и GRUP BY добавяш: WHERE `username` = 'test'
 
@gamena тук и с HAVING ще стане... А и според мен ще е по-добре, защото ако иска да покаже няколко юзера с where ще се прецака:

[sql]SELECT `username`, SUM(`points`) AS points
FROM `users`

GROUP BY `username`
HAVING username = 'test'
# а може и
# HAVING points > 100
#, примерно[/sql]
 
HAVING се изпълнява след събирането на резултатите. Нали се сещаш какво се случва -> събираш точките на всички и след това вземаш само един. С WHERE събираш точките на точно определен човек.

Не виждам по какъв начин може да се счупи с WHERE?!

SELECT .... WHERE `username` IN ('dwqdqwd','qwdqd','wdd')....
 
gamena007 каза:
HAVING се изпълнява след събирането на резултатите. Нали се сещаш какво се случва -> събираш точките на всички и след това вземаш само един. С WHERE събираш точките на точно определен човек.

Не виждам по какъв начин може да се счупи с WHERE?!

SELECT .... WHERE `username` IN ('dwqdqwd','qwdqd','wdd')....
Да, прав си. :?:
С where ще се счупи само ако нямаш group by, аз имах предвид това.
Току що тествах, работи и с where и с having ако имаш group by, ако нямаш и на двете се прецаква.

Само се чудя, ако имаш select .. where id="конкретно число", необходимо ли е да ползваш group by и ще стане ли по-бързо или по-бавно?

select sum(points) from table where user_id=5

или

select sum(points) from table where user_id=5 group by user

Според мен второто е излишно, защото group by ще се изпълни след where?
 
SUM се използва за работа с множество записи. С GROUP BY казваш как записите трябва да се обединяват (все едно казваш трябват ми обобщени резултати за всички които имат едно и също име и mysql ти връща резултати за всички Иван, Петър, Георги...). WHERE `user_id` = 5 филтрира използваните резултати по време на събърането им в колекцията. Having филтрира резултатите след като е готов резултата. Having с прости думи е същото като WHERE само че се изпълнява след като се извлекат всички резултати и може да работи с полета, които са генерирани по време на заявката (примерно SUM, COUNT, AVG и т.н.)
 
Колко начини опитах, пак не става... Някой не може ли да ми даде готов код с всичко, че ми писна... :o
 
Според мен проблема на @bganonymous не е в самата заявка вече.. мисля че той иска след като вече е направил заявката , кода с който се извеждат самите резултати.

Така ли е ?
 
sentenello каза:
Според мен проблема на @bganonymous не е в самата заявка вече.. мисля че той иска след като вече е направил заявката , кода с който се извеждат самите резултати.

Така ли е ?
Да, точно така!
 

Back
Горе