Forum » Programiranje » [mysql] malo bolj zahtevna poizvedba
[mysql] malo bolj zahtevna poizvedba
cryptozaver ::
Ubijam se z mal bolj zoprno sql poizvedbo. Spodaj je kot primer simbolicna tabela. abcdef so imena polj stevila in crke pa neke testne vrednost. Potrebujem sql ki bi delal naslednje.
ce
a=d
b=c
c=stevilo se ne sme ponovit
d=1
e=neko poljubno ime
f=vrednost za sestevanje, izbere se polje z max vrednostjo
a b c d e f
-----------
d c 2 1 s 2
d c 1 1 t 3
d c 1 1 m 1
f j 9 1 r 1
veljavni sta torej prvi dve vrstici, izpis pa mora bit naslednji:
5!!!! (sestevek prve in druge vrstice)
poskusil sem takole:
SELECT c,sum(f) FROM tabela WHERE a='d' and b='c' and d='1' group by c
vrne 4 ker sesteje vrstici kjer se c ponavlja, namesto da bi naredil prav obratno
SELECT count(distinct c) WHERE a='d' and b='c' and d='1'
prsteje polja tako kot je potrebno (2) in pod pravimi pogoji, vendar ne sesteje vrednosti pod f.
Kako bi se drugace lotil tega problema?
Evo obljubim pivo!
ce
a=d
b=c
c=stevilo se ne sme ponovit
d=1
e=neko poljubno ime
f=vrednost za sestevanje, izbere se polje z max vrednostjo
a b c d e f
-----------
d c 2 1 s 2
d c 1 1 t 3
d c 1 1 m 1
f j 9 1 r 1
veljavni sta torej prvi dve vrstici, izpis pa mora bit naslednji:
5!!!! (sestevek prve in druge vrstice)
poskusil sem takole:
SELECT c,sum(f) FROM tabela WHERE a='d' and b='c' and d='1' group by c
vrne 4 ker sesteje vrstici kjer se c ponavlja, namesto da bi naredil prav obratno
SELECT count(distinct c) WHERE a='d' and b='c' and d='1'
prsteje polja tako kot je potrebno (2) in pod pravimi pogoji, vendar ne sesteje vrednosti pod f.
Kako bi se drugace lotil tega problema?
Evo obljubim pivo!
OwcA ::
Verjetno si na to že pomislil, ampak kaj je narobe z:
SELECT distinct c, sum(f)
?
SELECT distinct c, sum(f)
?
Otroška radovednost - gonilo napredka.
cryptozaver ::
sem poskusil pa izpise napako (not valid mysql resource v naslednji vrstici mysql_fetch_array... )
SELECT distinct c, sum(f) FROM tabela WHERE a='d' and b='c' and d='1'
SELECT distinct c, sum(f) FROM tabela WHERE a='d' and b='c' and d='1'
cryptozaver ::
sicer nimam doma skripte, ampak kokr se spomnim, izpise error v sql statementu?? al nekaj podobnega. Skratka vedno kadar falis sql stavek se pojavi to isto obvestilo.
cryptozaver ::
Evo sem nasel en bekap :-) php izpise tole:
Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in ...path... on line 75
line 75 je pa naslednja vrstica:
while($row = mysql_fetch_array($resultdfb))
{...
nic oprijemljivega
Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in ...path... on line 75
line 75 je pa naslednja vrstica:
while($row = mysql_fetch_array($resultdfb))
{...
nic oprijemljivega
zerox ::
je že grim_ povedal da manjka group by vrjetno. Kaj ko bi izpisoval mysql errorje kot je bilo že tudi povedano?
if(!$resultdfb)
die( 'ERR:'.mysql_error());
dobiš pa po mojem napako: ERROR 1140: Mixing of GROUP columns (MIN(),MAX(),COUNT()...) with no GROUP columns is illegal if there is no GROUP BY clause.
dodaj stavku group by ... pa po mojem boš moral sum odstranit in raje potem v zanki v phpju seštet rezultate za f...bo bolj prav
if(!$resultdfb)
die( 'ERR:'.mysql_error());
dobiš pa po mojem napako: ERROR 1140: Mixing of GROUP columns (MIN(),MAX(),COUNT()...) with no GROUP columns is illegal if there is no GROUP BY clause.
dodaj stavku group by ... pa po mojem boš moral sum odstranit in raje potem v zanki v phpju seštet rezultate za f...bo bolj prav
McAjvar ::
me je zerox prehitel z napako
in pa se strinjam z njim, da je morda bolj enostavno v php-ju sesteti vrednosti v stolpcu f. ali pa naredi nov query, ce ti to bolj ustreza.
morda bi nekako taksen stavek bil primeren v primeru rocnega sestevanja vrednosti stolpca f:
SELECT [distinct] c,f FROM tabela WHERE a='d' and b='c' and d='1' group by c
in pa se strinjam z njim, da je morda bolj enostavno v php-ju sesteti vrednosti v stolpcu f. ali pa naredi nov query, ce ti to bolj ustreza.
morda bi nekako taksen stavek bil primeren v primeru rocnega sestevanja vrednosti stolpca f:
SELECT [distinct] c,f FROM tabela WHERE a='d' and b='c' and d='1' group by c
"[...] the advance of civilization is nothing
but an exercise in the limiting of privacy."
- Isaac Asimov
but an exercise in the limiting of privacy."
- Isaac Asimov
Ziga Dolhar ::
cryptozaver, zdej te mam pa dost.
> nic oprijemljivega ...
Error ...
> Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in ...path... on line 75
... pomeni, da argument, ki ga pošlješ [v bistvu kot kazalec na rešitev] v fetchanje (konkretno $resultdfb), _NE_ vsebuje rezultatov, ki jih mysql strežnik vrne. (Beri: ne gre za prazno množico rešitev, ampak neobstoj zaradi napake, ponavadi v sintaksi).
Zato pod vrstico, ki izgleda nekako tako...
$resultdfb = mysql_query(...);
... vrzi tole:
var_dump(mysql_error());
Hvala in lep dan še naprej.
> nic oprijemljivega ...
Error ...
> Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in ...path... on line 75
... pomeni, da argument, ki ga pošlješ [v bistvu kot kazalec na rešitev] v fetchanje (konkretno $resultdfb), _NE_ vsebuje rezultatov, ki jih mysql strežnik vrne. (Beri: ne gre za prazno množico rešitev, ampak neobstoj zaradi napake, ponavadi v sintaksi).
Zato pod vrstico, ki izgleda nekako tako...
$resultdfb = mysql_query(...);
... vrzi tole:
var_dump(mysql_error());
Hvala in lep dan še naprej.
https://dolhar.si/
BigWhale ::
SELECT DISTINCT c, SUM(f) WHERE pogoji GROUP BY c
Zgodovina sprememb…
- spremenil: BigWhale ()
BigWhale ::
Ceprav, postgres tudi tole prebavi:
kpos= select * from la;
c | d
---+---
1 | 4
2 | 3
1 | 5
2 | 1
(4 rows)
kpos= select c, sum(d) from la group by c;
c | sum
---+-----
2 | 4
1 | 9
(2 rows)
kpos= select * from la;
c | d
---+---
1 | 4
2 | 3
1 | 5
2 | 1
(4 rows)
kpos= select c, sum(d) from la group by c;
c | sum
---+-----
2 | 4
1 | 9
(2 rows)
zerox ::
Ja le da on želi vsoto vseh fjev, ki ustrezajo pogoju. V njegovem primeru 5. Torej bi s sql queryjem dobil tak rezultat lahko tako, da bi najprej naredil
CREATE VIEW tralala as SELECT DISTINCT c, f WHERE pogoji GROUP BY c.
in potem
SELECT SUM(f) FROM tralala.
Vendar nastane težava zaradi mysqla, katerega različico ima vrjetno 4.x, ki pa ne podpira create view kolikor se spomnim.
CREATE VIEW tralala as SELECT DISTINCT c, f WHERE pogoji GROUP BY c.
in potem
SELECT SUM(f) FROM tralala.
Vendar nastane težava zaradi mysqla, katerega različico ima vrjetno 4.x, ki pa ne podpira create view kolikor se spomnim.
Zgodovina sprememb…
- spremenil: zerox ()
cryptozaver ::
Kar veliko predlogov. Hvala. Se bom takoj lotil zadeve. Sicer pa mam MySQL v3.23.49. Sporocim rezultat!
cryptozaver ::
Sem resil problem. Ziggga hvala za var_dump...
Poskusil sem takole:
SELECT c,f FROM tabela WHERE pogoji group by c
in v php-ju sestel vrednosti.
ampak! sledi se 'lepsi' problem. Rabim se izpis vsot po imenih 'e' (tudi group by ker se imena ponavljajo).
Ce grupiram po obeh pogojih (c in e) glede na zgled nekako ne deluje group po 'c'.
SELECT c,e FROM tabela WHERE pogoji group by c,e ali
SELECT distinct c,e FROM tabela WHERE pogoji group by c,e
Kaksna ideja?
Poskusil sem takole:
SELECT c,f FROM tabela WHERE pogoji group by c
in v php-ju sestel vrednosti.
ampak! sledi se 'lepsi' problem. Rabim se izpis vsot po imenih 'e' (tudi group by ker se imena ponavljajo).
Ce grupiram po obeh pogojih (c in e) glede na zgled nekako ne deluje group po 'c'.
SELECT c,e FROM tabela WHERE pogoji group by c,e ali
SELECT distinct c,e FROM tabela WHERE pogoji group by c,e
Kaksna ideja?
destiny ::
SELECT c,max(e) FROM tabela WHERE pogoji group by c
seveda če hočeš za en "c" dobit en "e"
seveda če hočeš za en "c" dobit en "e"
Vredno ogleda ...
Tema | Ogledi | Zadnje sporočilo | |
---|---|---|---|
Tema | Ogledi | Zadnje sporočilo | |
» | Učenje programiranja PHPOddelek: Programiranje | 1515 (1056) | Spura |
» | [SQL] Unikatni izpisiOddelek: Programiranje | 2254 (1641) | 111111111111 |
» | SQL poizvedbaOddelek: Programiranje | 1497 (1259) | xsenon |
» | SQL poizvedba z DISTINCTOddelek: Programiranje | 1934 (1775) | zdravc |
» | PHP help!Oddelek: Programiranje | 1754 (1592) | rc-car |