IT NEWS PC REVUE PC FORUM FreeBSDInternet time: @915
Obsah fóra
Pravidlá  •  Kontakt  •  Prihlásenie  •  Registrácia

Ako zvládnuť účtovníctvo?

Vyskúšajte ekonomický software KROS, pomôže Vám. Vyskúšajte demo zadarmo! www.kros.sk

Dali sme si poradiť

Naše peniaze sa zhodnocujú. A vám? www.partnersgroup.sk

Účtovníctvo, Faktúry, Sklady

jednoducho ovládateľné programy od MRP za 20 rokov cez 100000 inštalácií www.mrp.sk

Zbavte sa viazanosti

Za Samsung Galaxy Ace so zlatým O2 Paušálom zaplatíte teraz 12 €! pausal.o2.sk

Neuveriteľne lacná .sk doména

Rýchla registrácia domén za výborné ceny. www.exohosting.sk

Select zavisly na case aj pocte prispevkov v danom case

Zaslať odpoveď
AutorSpráva
baumax
Užívateľ
Užívateľ

Založený: 11.12.2007
Príspevky: 278

PríspevokZaslal: Št 15.09.11 22:10Odpovedať s citátomNávrat hore

Mam takyto select z tabulky, t.j. zoradim si ludi podla priemernej hodnoty v stlpci prispevok

kód:
$xyz = "SELECT nick_name, avg(prispevok) FROM prispevky_table group by nick_name ORDER by avg(prispevok) DESC ";
$vysledok = mysql_query($xyz) or die ("Stala sa chyba v spojeni s DB");


Tabulka je plna zaznamov a mam v kazdom zazname aj datum, v ktorom dany nick_name pridal zaznam do databazy.

Potrebujem select, ktory mi z tabulky vyberie a zoradi ludi podla avg(prispevok), ktori za poslednych 6 mesiacov vlozili minimalne 60 zaznamov. (urcite to bude maly pocet z celkoveho poctu prispievatelov)

V stlpci prispevok je cislo typu float, ktore moze byt od 0 po 10, aj desatinne.

Dakujem.
Zobraziť informácie o autoroviOdoslať súkromnú správu
stenley
Moderátor
Moderátor

Založený: 27.07.2007
Príspevky: 3776
Bydlisko: Bratislava
Vek: 27

PríspevokZaslal: Pi 16.09.11 7:50Odpovedať s citátomNávrat hore

skus pouzit having - neviem, v akom formate mas datum, takze zatial takto:
kód:
SELECT nick_name, AVG(prispevok), count(*) pocet
FROM prispevky_table
WHERE datum >= SUBDATE(NOW(), INTERVAL 6 MONTH)
GROUP BY nick_name
HAVING pocet >= 60
ORDER BY AVG(prispevok) DESC

_________________
Desktop: CPU: AMD Athlon64 3000+ | MB: Biostar K8T890-A9 | VGA: NVIDIA GeForce 6200 LE 256MB | RAM: 2x 1GB A-DATA DDR 400 MHz Dual Kit | HDD: WD Caviar Blue 320GB | DVD: LG GSA-H10N | Keyboard: Chicony KU-0420 Silver/Black | Mouse: Logitech RX1000 | Zdroj: Corsair CX400 400W | CASE: DELUX DLC-MD370 Black | LCD: 20" Samsung 206BW | Repro: Teac XL-20
Notebook: ACER Aspire 4820TG 14" | CPU: Intel Core i5 2,53 GHz | VGA: ATI Mobility Radeon HD5650 1GB / Intel HD Graphics | RAM: 4GB DDR3 1066 MHz | HDD: 640GB
Zobraziť informácie o autoroviOdoslať súkromnú správuICQJabber
baumax
Užívateľ
Užívateľ

Založený: 11.12.2007
Príspevky: 278

PríspevokZaslal: Pi 16.09.11 8:15Odpovedať s citátomNávrat hore

datum mam takto: varchar(100) a vyzera presne v takomto formate: 14.09.2011

je to cez datapicker nahodene do tabulky
Zobraziť informácie o autoroviOdoslať súkromnú správu
stenley
Moderátor
Moderátor

Založený: 27.07.2007
Príspevky: 3776
Bydlisko: Bratislava
Vek: 27

PríspevokZaslal: Pi 16.09.11 8:19Odpovedať s citátomNávrat hore

zvolit horsi format datumu sa uz nedalo?

_________________
Desktop: CPU: AMD Athlon64 3000+ | MB: Biostar K8T890-A9 | VGA: NVIDIA GeForce 6200 LE 256MB | RAM: 2x 1GB A-DATA DDR 400 MHz Dual Kit | HDD: WD Caviar Blue 320GB | DVD: LG GSA-H10N | Keyboard: Chicony KU-0420 Silver/Black | Mouse: Logitech RX1000 | Zdroj: Corsair CX400 400W | CASE: DELUX DLC-MD370 Black | LCD: 20" Samsung 206BW | Repro: Teac XL-20
Notebook: ACER Aspire 4820TG 14" | CPU: Intel Core i5 2,53 GHz | VGA: ATI Mobility Radeon HD5650 1GB / Intel HD Graphics | RAM: 4GB DDR3 1066 MHz | HDD: 640GB
Zobraziť informácie o autoroviOdoslať súkromnú správuICQJabber
baumax
Užívateľ
Užívateľ

Založený: 11.12.2007
Príspevky: 278

PríspevokZaslal: Pi 16.09.11 8:31Odpovedať s citátomNávrat hore

ono ja to mam tak, ze

if (empty($mesiac)) $mesiac = date('n');
if (empty($rok)) $rok = date('Y');

a potom selecty koncia:
datum LIKE '%$mesiac.$rok'"; - ked hladam pre dany rok
datum LIKE '%$rok'"; - ked hladam pre dany mesiac

takze nejako to treba spojit do kopy nie ? ehm
Zobraziť informácie o autoroviOdoslať súkromnú správu
stenley
Moderátor
Moderátor

Založený: 27.07.2007
Príspevky: 3776
Bydlisko: Bratislava
Vek: 27

PríspevokZaslal: Pi 16.09.11 8:35Odpovedať s citátomNávrat hore

mozno toto pomoze, aj ked funkcia na lavej strane by sa pouzivat nemala:
kód:
WHERE STR_TO_DATE(datum, '%d.%m.%Y') >= SUBDATE(CURDATE(), INTERVAL 6 MONTH)

Do buducna, nauc sa pouzivat typy stlpcov urcene pre casove udaje!

_________________
Desktop: CPU: AMD Athlon64 3000+ | MB: Biostar K8T890-A9 | VGA: NVIDIA GeForce 6200 LE 256MB | RAM: 2x 1GB A-DATA DDR 400 MHz Dual Kit | HDD: WD Caviar Blue 320GB | DVD: LG GSA-H10N | Keyboard: Chicony KU-0420 Silver/Black | Mouse: Logitech RX1000 | Zdroj: Corsair CX400 400W | CASE: DELUX DLC-MD370 Black | LCD: 20" Samsung 206BW | Repro: Teac XL-20
Notebook: ACER Aspire 4820TG 14" | CPU: Intel Core i5 2,53 GHz | VGA: ATI Mobility Radeon HD5650 1GB / Intel HD Graphics | RAM: 4GB DDR3 1066 MHz | HDD: 640GB
Zobraziť informácie o autoroviOdoslať súkromnú správuICQJabber
baumax
Užívateľ
Užívateľ

Založený: 11.12.2007
Príspevky: 278

PríspevokZaslal: Pi 16.09.11 8:42Odpovedať s citátomNávrat hore

a kebyze to spravim nejako tak, ze cely stlpec zmenim na format DATE ? nepomohlo by to ?
ta transformacia myslim by s udajmi dnu nemala nic spravit, ci ano ?
ptom by to nebolo lahsie ?
dik
Zobraziť informácie o autoroviOdoslať súkromnú správu
stenley
Moderátor
Moderátor

Založený: 27.07.2007
Príspevky: 3776
Bydlisko: Bratislava
Vek: 27

PríspevokZaslal: Pi 16.09.11 8:47Odpovedať s citátomNávrat hore

ked zmenis cisto len typ stlpca na date, hodnoty ti automaticky zmeni, len nie tak, ako by si si mozno prial - napriklad z datumu 14.09.2011 ti spravi 2014-09-20

ale nic ti nebrani v tom, aby si vykonal jeden update (upravis format datumu), zmenil typ stlpca a upravil svoj php kod...

_________________
Desktop: CPU: AMD Athlon64 3000+ | MB: Biostar K8T890-A9 | VGA: NVIDIA GeForce 6200 LE 256MB | RAM: 2x 1GB A-DATA DDR 400 MHz Dual Kit | HDD: WD Caviar Blue 320GB | DVD: LG GSA-H10N | Keyboard: Chicony KU-0420 Silver/Black | Mouse: Logitech RX1000 | Zdroj: Corsair CX400 400W | CASE: DELUX DLC-MD370 Black | LCD: 20" Samsung 206BW | Repro: Teac XL-20
Notebook: ACER Aspire 4820TG 14" | CPU: Intel Core i5 2,53 GHz | VGA: ATI Mobility Radeon HD5650 1GB / Intel HD Graphics | RAM: 4GB DDR3 1066 MHz | HDD: 640GB
Zobraziť informácie o autoroviOdoslať súkromnú správuICQJabber
baumax
Užívateľ
Užívateľ

Založený: 11.12.2007
Príspevky: 278

PríspevokZaslal: So 17.09.11 12:18Odpovedať s citátomNávrat hore

dakujem ...
ale mam tu problem ...

proste teraz spravi toto: vypise tych ludi, pocet je OK, ale zoradi ich zle, lebo ich zoradi podla avg(prispevok) za ten interval 6 mesiacov - potrebujem zoradenie podla avg(prispevok) celkove

ako na to ? nejakym vnorenym SELECTOM ? a ten dnu bude to co si napisal a ten vonkajsi bude order by avg(prispevok) ale nebude obmedzeny tym casovym intervalom ... alebo nieco podobne ?

P.S. s tym datumom sorry, viem, ze som tam mal dat typ: date
Zobraziť informácie o autoroviOdoslať súkromnú správu
camo
Zablokovaný užívateľ
Zablokovaný užívateľ

Založený: 05.09.2009
Príspevky: 1176
Bydlisko: Lehota pod Vtáčnikom

PríspevokZaslal: So 17.09.11 15:05Odpovedať s citátomNávrat hore

Ten typ stĺpca budeš musieť zmeniť. Dátumové funkcie potrebujú pre fungovanie správny typ.
Až potom má zmysel riešiť to radenie....
Takže najprv update na správny formát dátumu a potom change column na správny typ...
Zobraziť informácie o autoroviOdoslať súkromnú správuSkypeZobraziť autorove WWW stránky
baumax
Užívateľ
Užívateľ

Založený: 11.12.2007
Príspevky: 278

PríspevokZaslal: So 17.09.11 15:17Odpovedať s citátomNávrat hore

camo: mne to stenley napisal aj s mojim typom, je to OK
poradit nevies s tym problemom, ktory mam aktualne ?
Zobraziť informácie o autoroviOdoslať súkromnú správu
camo
Zablokovaný užívateľ
Zablokovaný užívateľ

Založený: 05.09.2009
Príspevky: 1176
Bydlisko: Lehota pod Vtáčnikom

PríspevokZaslal: So 17.09.11 15:38Odpovedať s citátomNávrat hore

Aktuálne máš problém s typom mimo iné...
A napísal ti Stenley ako zmeniť typ stĺpca, alebo si tým myslel toto:
kód:
WHERE STR_TO_DATE(datum, '%d.%m.%Y') >= SUBDATE(CURDATE(), INTERVAL 6 MONTH)

Stenley ti tu dokola píše, že ten typ je nanič a bolo by ho treba zmeniť.

Tú funkciu STR_TO_DATE(datum, '%d.m%.%Y') použi v update.
Zobraziť informácie o autoroviOdoslať súkromnú správuSkypeZobraziť autorove WWW stránky
baumax
Užívateľ
Užívateľ

Založený: 11.12.2007
Príspevky: 278

PríspevokZaslal: So 17.09.11 16:17Odpovedať s citátomNávrat hore

camo: prosim ta, neries, co je vyriesene. Ved sa ta slusne pytam, ci mi nevies pomoct s tym triedenim podla avg(prispevok) ale nie za poslednych 60 dni, ale celkovo, ved som to tu jasne myslim napisal.
problem s typom NEMAM, neviem ako Ti to este mam napisat inak
Zobraziť informácie o autoroviOdoslať súkromnú správu
camo
Zablokovaný užívateľ
Zablokovaný užívateľ

Založený: 05.09.2009
Príspevky: 1176
Bydlisko: Lehota pod Vtáčnikom

PríspevokZaslal: Ne 18.09.11 11:16Odpovedať s citátomNávrat hore

Myslím, že tá podmienka na tých 60 záznamov má byť v having. Ale či sa nemýlim neviem. Netestoval som to.

kód:
SELECT nick_name, AVG(prispevok), count(*) pocet
FROM prispevky_table
GROUP BY nick_name
HAVING (select count(*) as pocet from prispevky_table group by nick_name where pocet > 60 and datum >= SUBDATE(NOW(), INTERVAL 6 MONTH))
ORDER BY AVG(prispevok) DESC


Na viac sa asi nezmôžem...

A som presvedčený, že máš problém s typom stĺpca!

EDIT: po 15 hodinách 53 minútach

Alebo skôr takto:
kód:
select nick_name, avg(prispevok), count(*)
from prispevky_table t1
join (select nick_name meno2, count(*) pocet
                 from prispevky_table
                 where prispevky_table.datum >= SUBDATE(NOW(), INTERVAL 6 MONTH)
                 group by meno2
                 having pocet>60) t2
on t1.nick_name=t2.meno2;
Zobraziť informácie o autoroviOdoslať súkromnú správuSkypeZobraziť autorove WWW stránky
baumax
Užívateľ
Užívateľ

Založený: 11.12.2007
Príspevky: 278

PríspevokZaslal: Po 19.09.11 9:34Odpovedať s citátomNávrat hore

camo, ten zapis posledny asi nebude dobry, pise mi chybu, zly syntax

ja som to zapisal takto podla teba:
kód:

$poziadavkaOK2 = "SELECT nick_name, AVG(prispevok), count(*)
FROM prispevky_table  t1
join (SELECT nick_name meno2, count(*) pocet
                 from prispevky_table
                 WHERE STR_TO_DATE(cas, '%d.%m.%Y') >= SUBDATE(NOW(), INTERVAL 6 MONTH)
                 group by meno2
                 having pocet >= 60) t2
on t1.nick_name=t2.meno2)";

$resultOK2 = mysql_query($poziadavkaOK2) or die ("Stala sa chyba v spojeni s DB");


v phpmyadmin: #1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ')
LIMIT 0, 60' at line 1

stenley, poradis ty ? hore som pisal, kde mam problem s tym tvojim zapisom
Zobraziť informácie o autoroviOdoslať súkromnú správu
Zobraziť príspevky z predchádzajúcich:    
Zaslať odpoveď
Nemôžete pridávať nové témy do tohto fóra.
Nemôžete odpovedať na témy v tomto fóre.
Nemôžete upravovať svoje príspevky v tomto fóre.
Nemôžete mazať svoje príspevky v tomto fóre.
Nemôžete hlasovať v tomto fóre.

Powered by phpBB 2.x.x © 2005 - 2012 PCforum, webhosting by WebSupport, edited by JanoF

SEO - optimalizácia pre vyhľadávače

Freebsd