Autor | Zpráva | ||
---|---|---|---|
kini Profil |
#1 · Zasláno: 18. 1. 2017, 10:14:26
Ahoj. Chtěl bych se zeptat jak seřadit výsledky sql dotazu aby se řadily podle datumu s tím že když je datum v db nižší než současné datum zařadí se nakonec. Tzn pokut dnes je 18.01 a v db mám datumy 17.01, 18.01 a 19.01 tak jejich pořadí bude 18.01, 19.01, 17.01.
|
||
Tomášeek Profil |
#2 · Zasláno: 18. 1. 2017, 10:17:11
kini:
Nejsem si zcela jist (a nemám kde vyzkoušet), ale mohlo by to být něco podobného ... ORDER BY datum >= NOW() DESC Možná ještě za to předat , datum , zkus.
|
||
kini Profil |
#3 · Zasláno: 18. 1. 2017, 11:13:30
Funguje to na localhostu ale ne na hostingu.
|
||
blaaablaaa Profil |
#4 · Zasláno: 18. 1. 2017, 11:31:10
kini:
Mas datumy ulozene jako DATE? |
||
kini Profil |
#5 · Zasláno: 18. 1. 2017, 11:34:20
Ano.
|
||
CZechBoY Profil |
#6 · Zasláno: 18. 1. 2017, 12:02:05
ORDER BY DATE_FORMAT(datum, '%Y-%m-%d') = CURDATE() DESC, datum DESC |
||
kini Profil |
#7 · Zasláno: 18. 1. 2017, 12:08:27
CZechBoY:
To nefunguje už vůbec. Vrací mi to chyby date_format() expects parameter 1 to be DateTimeInterface, string given SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near '= CURDATE() DESC timestamp_show DESC' at line 1 |
||
CZechBoY Profil |
#8 · Zasláno: 18. 1. 2017, 12:24:20
Posli cos tam poslal...
To co jsem psal je sql a ne php. |
||
kini Profil |
CZechBoY:
Tenhle kod funguje a dělá přesně to co od něj chci na localhostu ale ne na hostingu: ->order(self::COLUMN_date . ' >= NOW() DESC ') |
||
juriad_ Profil * |
#10 · Zasláno: 18. 1. 2017, 12:30:45
kini:
A mohl bys nám ukázat, jak se to špatně chová? A jak by se to na stejných datech mělo chovat? Tomášeek ti navíc řekl, že můžeš použít sekundární řazení podle datum , což ty neděláš.
|
||
kini Profil |
#11 · Zasláno: 18. 1. 2017, 12:34:59
juriad:
Pokut dnes je 18.01 a v db mám datumy 17.01, 18.01, 19.01, 20.01 a 21.01 tak jejich pořadí bude 19.01, 20.01, 21.01, 18.01, 17.01. Na localhostu to funguje. Na hostingu se to vypisuje v pořadí: 21.01, 20.01, 19.01, 18.01, 17.01. |
||
Keeehi Profil |
#12 · Zasláno: 18. 1. 2017, 12:50:14
kini:
1) Vypiš si sestavený dotaz a zkus ho spustit ručně v administraci databáze na hostingu. Pokud ti bude dávat jiné výsledky jak na localhostu tak na hostingu, tak nám ho tu ukaž. 2) Nemůže to být nějakou keší? Frameworky na localhostu keše vypínají. Na hostingu bývá třeba je promazat po nahrání nové verze. |
||
kini Profil |
#13 · Zasláno: 18. 1. 2017, 12:54:57
Keeehi:
SELECT * FROM `articles` ORDER BY datum >= NOW() DESC Na localhostu jinej výsledek než na hostingu. |
||
Kajman Profil |
#14 · Zasláno: 18. 1. 2017, 13:10:28
Protože tam nemáte upřesněné pořadí, jen to, že proběhlé mají být pod blížícími se. Doplňte další řazení...
SELECT * FROM `articles` ORDER BY datum >= NOW() DESC, CASE WHEN datum >= NOW() THEN datum END, datum DESC Nebo by mohlo být přehlednější (SELECT * FROM `articles` WHERE datum >= NOW() ORDER BY datum) UNION ALL (SELECT * FROM `articles` WHERE datum < NOW() ORDER BY datum DESC) |
||
TomášK. Profil * |
#15 · Zasláno: 18. 1. 2017, 13:14:27
Kajman
Ten příklad s UNION ALL podle mě není korektní, UNION nezaručuje, že zachová pořadí:
Use of ORDER BY for individual SELECT statements implies nothing about the order in which the rows appear in the final result because UNION by default produces an unordered set of rows. |
||
kini Profil |
Kajman:
V phpmyadminu to funguje. |
||
Kajman Profil |
#17 · Zasláno: 18. 1. 2017, 13:58:19
TomášK.:
To je fakt, proto kini raději zkuste první příklad. |
||
Kcko Profil |
#18 · Zasláno: 18. 1. 2017, 14:42:46
TomášK.:
UNION zachová pořadí pokud se k tomu doplní nějaký LIMIT, např LIMIT 123456789 |
||
TomášK. Profil * |
#19 · Zasláno: 18. 1. 2017, 14:52:20
Kcko:
Zdroj? Já jsem to zkopíroval z dev.mysql.com/doc/refman/5.7/en/union.html, nevidím tam zmínku o tom, co říkáš. Je to pozorované chování nebo někde z dokumentace? |
||
Kcko Profil |
#20 · Zasláno: 18. 1. 2017, 15:26:15
TomášK.:
UNION špatně řadí jednotlivé sady výsledků + vyzkoušeno. |
||
TomášK. Profil * |
#21 · Zasláno: 18. 1. 2017, 15:43:13
Kcko:
Z odkazovaného vlákna (ani z té dokumentace) neplyne, že by po přidání LIMITu UNION zachoval řazení. O limitu se tam píše, že je zpravidla v poddotazech s společně ORDER BY, protože bez něj by tam ORDER BY nemělo žádný efekt. Že to tak funguje věřím, ale může se to bez varování změnit. |
||
Časová prodleva: 8 let
|
0