Stránka: 1 z 1
| [ Príspevkov: 9 ] | |
| Autor | Správa |
|---|
Registrovaný: 02.04.11 Prihlásený: 14.08.14 Príspevky: 74 Témy: 31 | 31 |
Caute, snazim sa vytvorit velmi zlozity SELECT, tak snad mi tu bude niekto vediet pomoct...
Mam 3 tabulky: firmy, firmy_kat_2 a firmy_hodnotenie.
Mojim cielom je spojit ich v jednom SELECTE a zoradit podla nasledujucich kriterii.
1. Firmy co maju zaplateny profil su prve
2. Zaplatene firmy sa daju hodnotit, takze tie zoradit podla hodnotenia ( hodnotenie je jednoduche, je to tabulka firmy_hodnotenie) kladny hlas je 100 a zaporny 0. Zoradit to nechcem ale podla obycajneho priemeru ale podla SUM(hodnotenie), aby bol relevantny aj pocet hlasov....
3. Ostatne nezaplatene teda ani nehodnotene firmy zoradit podla nazvu....
Momentalne mi funguje tento SELECT, lenze tu niesu tie platene firmy zoradene podla hodnotenia...
Kód: SELECT firmy_kat_2.firma, firmy.kraj, firmy.zaplatene FROM firmy_kat_2 INNER JOIN firmy ON firmy_kat_2.firma=firmy.id WHERE firmy_kat_2.kategoria='$r_kat_2[id]' AND firmy.zobrazit='ano' AND firmy.kraj='$_GET[filter_id]' ORDER BY firmy.zaplatene DESC, firmy.nazov
Potrebujem tam vsak pridat to zoradenie podla hlasovania. Tabulka hlasovania vyzera nasledovne: Kód: CREATE TABLE `firmy_hodnotenie` ( `id` int(11) NOT NULL auto_increment, `firma` int(10) NOT NULL, `hodnotenie` varchar(250) NOT NULL, `ip` varchar(250) NOT NULL, `datum` date NOT NULL, PRIMARY KEY (`id`) )
Skusal som ten SELECT spravit takto ale, nerobi to to co chcem... Vyhodi to len jeden zaznam z DB... Kód: SELECT firmy_kat_2.firma, firmy.kraj, firmy.zaplatene, SUM(firmy_hodnotenie.hodnotenie) AS spolu FROM firmy_kat_2 INNER JOIN firmy ON firmy_kat_2.firma=firmy.id JOIN firmy_hodnotenie ON firmy_hodnotenie.firma=firmy.id WHERE firmy_kat_2.kategoria='$r_kat_2[id]' AND firmy.zobrazit='ano' AND firmy.kraj='$_GET[filter_id]' ORDER BY firmy.zaplatene DESC, spolu, firmy.nazov
Keby mi niekto vedel pomoct, velmi by som to ocenil...
|
|
Registrovaný: 29.10.08 Prihlásený: 30.07.12 Príspevky: 933 Témy: 2 | 2 |
1, nastuduj si rozdiel medzi INNER JOIN a JOIN
2, daj sem aj definicie tabuliek firmy a firmy_kat_2
3, k tabulkam priloz aj nejake vzorove data
|
|
Registrovaný: 02.04.11 Prihlásený: 14.08.14 Príspevky: 74 Témy: 31 | 31 |
Kód: CREATE TABLE `firmy` ( `id` int(11) NOT NULL auto_increment, `zobrazit` varchar(250) collate utf8_slovak_ci NOT NULL, `nazov` text collate utf8_slovak_ci NOT NULL, `zaplatene` date NOT NULL, `kraj` int(10) NOT NULL, `okres` int(10) NOT NULL, `ulica` varchar(250) collate utf8_slovak_ci NOT NULL, `mesto` varchar(250) collate utf8_slovak_ci NOT NULL, `psc` varchar(250) collate utf8_slovak_ci NOT NULL, `email` varchar(250) collate utf8_slovak_ci NOT NULL, `login` varchar(250) collate utf8_slovak_ci NOT NULL, `heslo` varchar(250) collate utf8_slovak_ci NOT NULL, `telefon` varchar(250) collate utf8_slovak_ci default NULL, `fax` varchar(250) collate utf8_slovak_ci NOT NULL, `mobil` varchar(250) collate utf8_slovak_ci NOT NULL, `ico` int(11) default NULL, `dic` varchar(250) collate utf8_slovak_ci NOT NULL, `ic_dph` int(11) default NULL, `obrazok` varchar(250) collate utf8_slovak_ci NOT NULL, `web` varchar(250) collate utf8_slovak_ci NOT NULL, `popis_short` text collate utf8_slovak_ci NOT NULL, `popis` text collate utf8_slovak_ci NOT NULL, `mapa` text collate utf8_slovak_ci NOT NULL, `akcia` varchar(250) collate utf8_slovak_ci NOT NULL, `datum` datetime NOT NULL, PRIMARY KEY (`id`) )
INSERT INTO `firmy` VALUES (4, 'ano', 'AUTO DANUBIUS s.r.o.', '2012-01-01', 1, 0, 'Trnavská cesta 39', 'Bratislava - Nové Mesto', '831 04', '', '', '', '', '', '', 0, '', 0, '', '', '', '', '', '', '2011-03-19 21:27:54');
Kód: CREATE TABLE `firmy_kat_2` ( `id` int(11) NOT NULL auto_increment, `firma` int(11) NOT NULL, `kat_1` int(10) NOT NULL, `kategoria` int(10) NOT NULL, PRIMARY KEY (`id`) )
INSERT INTO `firmy_kat_2` VALUES (9, 5, 6, 11);
|
|
Registrovaný: 29.10.08 Prihlásený: 30.07.12 Príspevky: 933 Témy: 2 | 2 |
takze zlozity select nieje ani zdaleka zlozity, hned z rukava ti davam dve moznosti
Kód: SELECT FIRMY_KAT_2.FIRMA, FIRMY.KRAJ, FIRMY.ZAPLATENE, (select sum(FIRMY_HODNOTENIE.HODNOTENIE) from FIRMY_HODNOTENIE where FIRMY_HODNOTENIE.FIRMA=FIRMY.ID )AS SPOLU FROM FIRMY_KAT_2 JOIN FIRMY ON FIRMY_KAT_2.FIRMA=FIRMY.ID WHERE FIRMY_KAT_2.KATEGORIA=11 AND FIRMY.ZOBRAZIT='ano' AND FIRMY.KRAJ=1 ORDER BY firmy.zaplatene DESC, spolu, firmy.nazov
Kód: SELECT FIRMY_KAT_2.FIRMA, FIRMY.KRAJ, FIRMY.ZAPLATENE, sum(FIRMY_HODNOTENIE.HODNOTENIE) AS SPOLU FROM FIRMY_KAT_2 JOIN FIRMY ON FIRMY_KAT_2.FIRMA=FIRMY.ID LEFT JOIN FIRMY_HODNOTENIE ON FIRMY_HODNOTENIE.FIRMA=FIRMY.ID WHERE FIRMY_KAT_2.KATEGORIA=11 AND FIRMY.ZOBRAZIT='ano' AND FIRMY.KRAJ=1 group by FIRMY_KAT_2.FIRMA, FIRMY.KRAJ, FIRMY.ZAPLATENE ORDER BY firmy.zaplatene DESC, spolu, firmy.nazov
|
|
Registrovaný: 02.04.11 Prihlásený: 14.08.14 Príspevky: 74 Témy: 31 | 31 |
No vyskusal som tieto dve moznosti, ale ziadna to nezobrazuje podla scitania tych hodnoteni. Firmy vypise dobre z DB ale stale som tam kde som bol...
|
|
Registrovaný: 29.10.08 Prihlásený: 30.07.12 Príspevky: 933 Témy: 2 | 2 |
no mozno preto ze selecty ktore som ti poslal boli zatial iba opravou tvojho problemu ze ti tvoj select vracal iba jeden riadok. mozno ak vysvetlis ako identifikujem firmu ktora ma zaplateny profil tak by sme sa pohli dalej.
|
|
Registrovaný: 02.04.11 Prihlásený: 14.08.14 Príspevky: 74 Témy: 31 | 31 |
V tabulke FIRMY je stlpec ZAPLATENE (date), takze ak je datum vacsi ako dnes, tak je zaplatena a konkretne do toho datumu....
A princip hodnotenia som popisal v prvom prispevku...
|
|
Registrovaný: 29.10.08 Prihlásený: 30.07.12 Príspevky: 933 Témy: 2 | 2 |
nenijesom odbornik na mysql, ale preco nepouzijes IF ?
Kód: SELECT FIRMY_KAT_2.FIRMA, FIRMY.KRAJ, FIRMY.ZAPLATENE, sum(FIRMY_HODNOTENIE.HODNOTENIE) AS SPOLU FROM FIRMY_KAT_2 JOIN FIRMY ON FIRMY_KAT_2.FIRMA=FIRMY.ID LEFT JOIN FIRMY_HODNOTENIE ON FIRMY_HODNOTENIE.FIRMA=FIRMY.ID WHERE FIRMY_KAT_2.KATEGORIA=11 AND FIRMY.ZOBRAZIT='ano' AND FIRMY.KRAJ=1 group by FIRMY_KAT_2.FIRMA, FIRMY.KRAJ, FIRMY.ZAPLATENE ORDER BY IF(firmy.zaplatene<NOW(),1,0) , spolu, firmy.nazov
toto by malo zotriedit najprv tie co maju zaplateny profil a v ramci nich podla SUM(FIRMY_HODNOTENIE.HODNOTENIE) a nasledne este podla nazvu firmy
|
|
Registrovaný: 02.04.11 Prihlásený: 14.08.14 Príspevky: 74 Témy: 31 | 31 |
No vyzera ze to ide. Dakujem velmi pekne za pomoc 
|
|
Stránka: 1 z 1
| [ Príspevkov: 9 ] | |
|