» »

[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!

OwcA ::

Verjetno si na to že pomislil, ampak kaj je narobe z:
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'

grim_ ::

kaj pa GROUP BY?

Ziga Dolhar ::

... in kaj pravi mysql_error(), kje je težava?
https://dolhar.si/

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.

Ziga Dolhar ::

Ja, in ponavadi vsaj približno namigne, kje točno je napaka.
https://dolhar.si/

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

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

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
"[...] the advance of civilization is nothing
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.
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)

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.

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?

destiny ::

SELECT c,max(e) FROM tabela WHERE pogoji group by c

seveda če hočeš za en "c" dobit en "e"


Vredno ogleda ...

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

Učenje programiranja PHP

Oddelek: Programiranje
91406 (947) Spura
»

[SQL] Unikatni izpisi

Oddelek: Programiranje
212135 (1522) 111111111111
»

SQL poizvedba

Oddelek: Programiranje
161433 (1195) xsenon
»

SQL poizvedba z DISTINCT

Oddelek: Programiranje
191859 (1700) zdravc
»

PHP help!

Oddelek: Programiranje
251668 (1506) rc-car

Več podobnih tem