ORDER BY timestamp – MySQL – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

ORDER BY timestamp – MySQL – Fórum – Programujte.comORDER BY timestamp – MySQL – Fórum – Programujte.com

 

Míša
~ Anonymní uživatel
106 příspěvků
31. 12. 2009   #1
-
0
-

Ahoj, mám problém se řazením výsledku dotazu z databáze a chtěl bych se zeptat, jestli jste se s tím nesetkali.

Tabulka má strukturu:

[id:bigint(20)]
[data:text]
[date_change:timestamp;ON UPDATE CURRENT_TIMESTAMP;CURRENT_TIMESTAMP]
[date_entry:timestamp]

Pokud na tuto tabulku pošlu 'SELECT * FROM tabulka ORDER BY date_entry DESC' tak se stejnak řadí podle date_change a vůbec netuším proč... :(

Moc díky

Nahlásit jako SPAM
IP: 88.102.27.–
KIIV
~ Moderátor
+43
God of flame
31. 12. 2009   #2
-
0
-

To Míša : neni to jen shoda nahod? napriklad ze tam mas stejne data?

Nahlásit jako SPAM
IP: 77.237.136.–
Program vždy dělá to co naprogramujete, ne to co chcete...
bukaj_0010
Věrný člen
31. 12. 2009   #3
-
0
-

Míša
Pokud na tuto tabulku pošlu 'SELECT * FROM tabulka ORDER BY date_entry DESC' tak se stejnak řadí podle date_change
Bude to tím typem sloupců -- TIMESTAMP -- nepoužívat, pokud nemáš dobrý důvod ho použít. (Jediný dobrý důvod použití je tehdy, když chceš zaznamenávat poslední změnu záznamu a nechceš to dělat ručně. Ovšem i v tomto případě je prostě lepší explicitně říct, že sloupec se má UPDATEovat na NOW() podle mě.)

Sloupec date_change (předpokládám dobře, že je to daum poslední změny příspěvku?) můžeš nechat jako TIMESTAMP s DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, ale date_entry nastav jako DATETIME. Dotaz pro vytvoření tabulky pak může vypadat následovně:

CREATE TABLE tabulka (

id BIGINT NOT NULL AUTO_INCREMENT PRIMARY KEY,
data TEXT NOT NULL,
date_change TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
date_entry DATETIME NOT NULL
);


Jelikož MySQL nepodporuje u DATETIME jako DEFAULT hodnotu funkce jako NOW() a u TIMESTAMP jde dát DEFAULT CURRENT_TIMESTAMP pouze pro jeden sloupec v tabulce, je potřeba to při vkládání udělat explicitně:

INSERT INTO tabulka (data, date_entry) VALUES ('Lorem ipsum...', NOW());


date_change se nastaví sám.

Další možností je by mělo být přidat trigger, který by date_entry nastavil na NOW().

Nahlásit jako SPAM
IP: 88.101.128.–
Jak se správně ptát? -> http://www.hash.cz/inferno/otazky.html[br][br] Po programování je člověk hladovej.
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 7 hostů

Podobná vlákna

Mysql a timestamp — založil bach

ORDER BY — založil Codemaster

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý