NOVINKA! E-learningové kurzy umělé inteligence. Nyní AI za nejlepší ceny. Zjisti více:
NOVINKA – Víkendový online kurz Software tester, který tě posune dál. Zjisti, jak na to!

Diskuze: SQL Select - dvakrát stejně, jednou nefunguje

V předchozím kvízu, Online test znalostí PHP, jsme si ověřili nabyté zkušenosti z kurzu.

Aktivity
Avatar
Michal Kuba
Tvůrce
Avatar
Michal Kuba:3.6.2016 12:51

Ahoj.
Pro archiv článků, ve kterém se dá hledat podle roků existujících v db mám tento dotaz, volaný z kontroleru a vše funguje:

public function vratRoky()
        {
            return Db::dotazVsechny('
                    SELECT YEAR(datum) AS roky
                    FROM clanky
                    GROUP BY (datum)
                    having count(*) > 1
                    ORDER BY datum DESC
                    ');
        }

Potom ale chci stejnou metodu hledání použít u fotek. Z kontroleru galerie zavolám příslušnou funkci, která se jmenuje stejně ale je v jiném modelu, jinak vypadá podobně, ale nefunguje, při print_r mi to vrací prázdné pole:

public function vratRoky()
        {
            return Db::dotazVsechny('
                    SELECT YEAR(datum) AS roky
                    FROM foto
                    GROUP BY (datum)
                    having count(*) > 1
                    ORDER BY datum DESC
                    ');
        }

Já na to koukám dlouho, zkusil jsem různé klazule pro výběr roku, změnil jsem u tabulky fotek úložistě na InnoDB místo MyISAM ale furt to nefunguje :(

 
Odpovědět
3.6.2016 12:51
Avatar
Michal Kuba
Tvůrce
Avatar
Odpovídá na Michal Kuba
Michal Kuba:3.6.2016 12:54

Ještě teda doplním, že datum v tabulce článků je jako "date", u fotek je to "timestamp", tam to asi bude drhnout :/

 
Nahoru Odpovědět
3.6.2016 12:54
Avatar
Odpovídá na Michal Kuba
Dominik Gavrecký:3.6.2016 13:23

Nechaj to ako InnoDB a skús čo ti vráti toto

select YEAR(timestamp) from TABLE
Nahoru Odpovědět
3.6.2016 13:23
Hlupák nie je ten kto niečo nevie, hlupákom sa stávaš v momente keď sa na to bojíš opýtať.
Avatar
Odpovídá na Michal Kuba
Dominik Gavrecký:3.6.2016 13:24

Ale do budúcnosti by som určite zvolil iní dátový typ.

Nahoru Odpovědět
3.6.2016 13:24
Hlupák nie je ten kto niečo nevie, hlupákom sa stávaš v momente keď sa na to bojíš opýtať.
Avatar
Michal Kuba
Tvůrce
Avatar
Odpovídá na Dominik Gavrecký
Michal Kuba:3.6.2016 13:28

Bohužel to taky nefunguje, tentokrát se to ani nenačte a web spadne kvůli tomu :/ Jinak InnoDB jsem jen na chvíli změnil, zda to není tím.. jinak používám MyISAM..

 
Nahoru Odpovědět
3.6.2016 13:28
Avatar
Michal Kuba
Tvůrce
Avatar
Odpovídá na Dominik Gavrecký
Michal Kuba:3.6.2016 13:30

A ted zkouším že i když dám pouze SELECT datum tak to nefunguje, stále prázdné pole

 
Nahoru Odpovědět
3.6.2016 13:30
Avatar
Odpovídá na Michal Kuba
Dominik Gavrecký:3.6.2016 13:31

http://stackoverflow.com/…imestamp-sql skús ešte niečo z tohto sú tam nejake zaujímave funkcie

Nahoru Odpovědět
3.6.2016 13:31
Hlupák nie je ten kto niečo nevie, hlupákom sa stávaš v momente keď sa na to bojíš opýtať.
Avatar
Odpovídá na Michal Kuba
Dominik Gavrecký:3.6.2016 13:31

Tak v tom prípade si myslím že problém bude niekde inde

Nahoru Odpovědět
3.6.2016 13:31
Hlupák nie je ten kto niečo nevie, hlupákom sa stávaš v momente keď sa na to bojíš opýtať.
Avatar
Michal Kuba
Tvůrce
Avatar
Odpovídá na Dominik Gavrecký
Michal Kuba:3.6.2016 13:33

toto téma na stacku jsem našel skoro hned, ale to mi taky nepomohlo :/ nejspíš chyba bude v tom GROUP BY a HAVING, protože to když odstraním tak už to nevrací prázdné pole..

 
Nahoru Odpovědět
3.6.2016 13:33
Avatar
Michal Kuba
Tvůrce
Avatar
Odpovídá na Dominik Gavrecký
Michal Kuba:3.6.2016 13:37

aha, takže byl asi problém v tom, že jsem groupoval podle "datum" a ne "roky", do čehož si to ukládám v SELECTU. Změnil jsem to následovně:

return Db::dotazVsechny('
                    SELECT YEAR(datum) AS roky
                    FROM foto
                    GROUP BY roky
                    having count(*) > 1
                    ORDER BY datum DESC
                    ');

a už to funguje.. každopádně nechápu, proč to takhle nemusí být u data článků, které je formátu "date" a ne "timestamp"

Akceptované řešení
+5 Zkušeností
Řešení problému
 
Nahoru Odpovědět
3.6.2016 13:37
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 10 zpráv z 10.