» »

SQL seštevanje

SQL seštevanje

pizdarija1 ::

Rabil bi seštet vrednost polij a.ans v SQL če je mogoče?

$sql = "SELECT s.ques, s.author_id, s.voted, s.add, a.res, a.ans, u.user
FROM survey s, answer a, user u WHERE u.id=s.author_id AND a.survey_id=$surveyId AND s.id=$surveyId ORDER BY s.id DESC";

PS: A se anketi po anglešk reče survey al pool da me ni gogltranslator nasrou?

Phoebus ::

Anketa je survey, ja...razen tiste čisto male "glasovalne" kot na ST levo so poll.

Kako seštet vrednost polj a.ans? select sum(a.ans)...?

pizdarija1 ::

Hvala za razlago to na levi delam.

$sql = "SELECT s.ques, s.author_id, s.voted, s.add, a.res, a.ans, u.user, sum(a.res) AS total
FROM survey s, answer a, user u WHERE u.id=s.author_id AND a.survey_id=$surveyId AND s.id=$surveyId GROUP BY a.res";

EDIT2: GROUP BY a.survey_id zračuna 6, mi pa ne nardi lopa

Zgodovina sprememb…

joze67 ::

Dobro, da ti kaj dela; sam bi pričakoval, da so polja v stavku select bodisi navedena v group by ali pa agregatne funkcije. Rjavim...

BTW, "ne lopa" ... česa ne počne?

pizdarija1 ::

joze67 imam res tako slabo narejeno, kako bi ti naredil? Imajo agregatne funkcije kakšno vezo z MS OFFICE bazo imam pa mysql?? Ne dela zanke več samo en izpis :[

joze67 ::

Nič ne pravim, da je slabo narejeno, in o mssql nimam pojma.

Kadarkoli bi jaz začel delat s tem (in bi delal v ms sql), bi mi avtomatično težil zaradi zgoraj povedanega. V moji knjigi je torej tak stavek sintaktično napačen. Samo dejstvo, da tebi to *nekaj* dela, je zame presenečenje, in znak, da sem že malo zarjavel. Samo to.

Ok, predpostavim, da mysql zan, česar ms sql ne zna, in je to lepši zapis od

SELECT s.ques, s.author_id, s.voted, s.add, a.res, sum(a.ans), u.user
FROM survey s, answer a, user u
WHERE u.id=s.author_id AND a.survey_id=s.id
GROUP BY s.ques, s.author_id, s.voted, s.add, a.res, u.user

Domnevam, da je $surveyId neka spremenljivka. Potem bi bilo jasno, da tvoj stavek vrne eno samo vrednost, in sicer za a.survey_id=s.id=$surveyId. V tem primeru je ORDER BY itaq odveč.

Jaz bi torej predlagal, da se znebiš $surveyId

pizdarija1 ::

GROUP BY vbistvu sploh ne poznam zgoraj sem mal preuredil in rezultate mi dvojno ponovi total pa še vedno ne rata.

$sql = "SELECT s.ques, s.author_id, s.voted, s.add, a.res, a.ans, u.user, sum(a.res) AS total
FROM survey s, answer a, user u
WHERE u.id=s.author_id AND a.survey_id=$surveyId
GROUP BY s.ques, s.author_id, s.voted, s.add, a.res, u.user";

Evo slikca za lažjo predstavo ;)

nemogoče da se znebim a.survey_id=s.id=$surveyId to je id ankete ki je prikazana, s.voted je število unique glasov ker mam narjen še možnost za checkbox in šteje 1x a.res je število glasov, ja ORDER je res brezveze noter.

EDIT2: GROUP BY a.res, a.survey_id vrne pravilno število odgovorov total je pa čist napačen 3 in 6 pač ni 12

Zgodovina sprememb…

joze67 ::

In ti bi hotel imeti # odgovorov (38 in 4)? a.res gre ven iz select liste in group by. Pa tabele a, s in u hočeš verjetno imeti povezane vez čas. Torej nekaj kot

SELECT s.ques, s.author_id, s.voted, s.add, sum(a.res), u.user
FROM survey s, answer a, user u
WHERE u.id=s.author_id AND a.survey_id=s.id AND s.id = $surveyId
GROUP BY s.ques, s.author_id, s.voted, s.add, u.user

pizdarija1 ::

Tako ja (38 in 4)!
Tukaj mi spet ne naredi zanke (z GROUP BY a.res nardi zračuna pa ne, a.survey_id pa lih obratno) a lahko razložiš zakaj tok velik (GROUP BY s.ques, s.author_id, s.voted, s.add, u.user) po kakšnem kriteriju jih vstaviš noter?
Zadnja možnost ostane da dodam v survey novo polje total sam je dost nepraktično.

joze67 ::

Ne vem, katero zanko pravzaprav pričakuješ.

S tvojimi podatki bi moj sql (10:13:18) *brez* " AND s.id=$surveyId" vrnil

ques, author_id, voted, add, sum(res), user
"What do you like to eat", 1, 31, 1240876395, 38, "legal4ever"
"What dou you like to drink", 1, 3, 1240896395, 4, "legal4ever"

in če bi imela več vprašanj, bi dobila več vrstic. Ampak ker sva dodala s.id=$surveyId, sva seveda dobila samo eno vrstico.

Domnevam, da polja author_id, voted, add, user potrebuješ nekje kasneje za obdelavo. Zdi se namreč, da ni mišljeno, da bi eno vprašanje (besedilo) imelo več avtorjev ali bilo dodano ob različnih časih.

Če za hip odmislim "zanko" - karkoli že je, je bolj pregledna naslednja možnost

SELECT s.ques, s.author_id, s.voted, s.add, u.user, (select sum(ans) from answer a where a.survey_id = s.id)
FROM survey s, user u
WHERE u.id=s.author_id AND s.id = $surveyId

pa ne potrebuješ nobenih group by. Moj algoritem sem ti pa že povedal, kot ga je meni isqlw povedal n-krat: če je uporabljena agregatna funkcija (min, max, sum, avg, ...), morojo biti vsa polja agregatne f-je ali pa navedena v group by. Bere se pa "za vsak": za vsako vprašanje, za vsakega avtorja, za vsako vrednost dodan, za vsakega avtorja (here we go again) seštej odgovore. Nekaj smisla ima, ker ques ni unique, se pravi da lahko dobiš enako vprašanje dveh avtorjev; ali da en avtor dvakrat vpraša isto, samo ob različnih časih; mišljeno pa najverjetneje ni tako.

BTW, survey.author_id je varchar(200) in user.id je int(11). Not good.

pizdarija1 ::


ques, author_id, voted, add, sum(res), user
"What do you like to eat", 1, 31, 1240876395, 38, "legal4ever"
"What dou you like to drink", 1, 3, 1240896395, 4, "legal4ever"

Tle bi te mogu prej opozorit da niso vsa polja izbrana sm mislu pač prbližn my bad!

Tkole bi mogl bit!
//SELECT s.ques, s.author_id, s.voted, s.add, a.res, a.ans, u.user, /* skupek */
za id #1,"What do you like to eat", 1, 31, 1240876395, /* 7,28,3 (loop) */, /* Pizza, Pasta, Sotething else */, "legal4ever", /* working not*/

Zdej mam tkole, to v oklepaju prvič vidm in nevem če prav kličem kako dobim vrednost ven total zaenkrat vrne 0.
$sql = "SELECT s.ques, s.author_id, s.voted, s.add, a.res, a.ans, u.user, (select sum(ans) from answer a where a.survey_id = s.id) AS total
FROM survey s, answer a, user u
WHERE u.id=s.author_id AND a.survey_id=$surveyId AND s.id = $surveyId";


Domnevam, da polja author_id, voted, add, user potrebuješ nekje kasneje za obdelavo. Zdi se namreč, da ni mišljeno, da bi eno vprašanje (besedilo) imelo več avtorjev ali bilo dodano ob različnih časih.


Nekaj smisla ima, ker ques ni unique, se pravi da lahko dobiš enako vprašanje dveh avtorjev; ali da en avtor dvakrat vpraša isto, samo ob različnih časih; mišljeno pa najverjetneje ni tako.

Mišlen je da se lahko ponavlja tole vprašanje na levo je blo že x-krat postavljeno in lahko primerjaš rezultate, bo pa opozorilo če bo vprašanje enako ne bo pa omejitev.
Ja rabim vsa polja ki jih izberem author_id in user za link za razširitev naprej, voted in add pa samo stilsko seprav (1132 glasov) in datum(od do -survey.end).

BTW, survey.author_id je varchar(200) in user.id je int(11). Not good.

survey.author_id popravljeno, kaj priporočaš za user.id ponavad kar 11 pustim.

joze67 ::

Zdej mam tkole, to v oklepaju prvič vidm in nevem če prav kličem kako dobim vrednost ven total zaenkrat vrne 0.


Pozna ura, hokej... Moral bi seštevati res in ne ans.
$sql = "SELECT s.ques, s.author_id, s.voted, s.add, a.res, a.ans, u.user, (select sum(res) from answer a where a.survey_id = s.id) AS total
FROM survey s, answer a, user u
WHERE u.id=s.author_id AND a.survey_id=$surveyId AND s.id = $surveyId";

pizdarija1 ::

Hudo dela :P, najlepša hvala velik si mi pomagu.


Vredno ogleda ...

TemaSporočilaOglediZadnje sporočilo
TemaSporočilaOglediZadnje sporočilo
»

SQL backup import

Oddelek: Programiranje
8978 (780) meh
»

Podatkovne baze - SQL enostavne poizvedbe

Oddelek: Programiranje
71935 (1528) galu
»

PHP prikaz objav od prijateljev

Oddelek: Izdelava spletišč
7840 (647) Ziga Dolhar
»

Malce zahtevnejši SQL stavek včasih narobe SELECT-a

Oddelek: Izdelava spletišč
302030 (1699) Brilko
»

SQL problem

Oddelek: Programiranje
51209 (1081) darh

Več podobnih tem