2010-07-26 14 views

Odpowiedz

20

Nie jestem pewien, czy jest jakiś ukryty sens w swoim pytaniu, ale standard to sposobem wydaje się pasować:

... order by eventDate, eventHour 

który daje godzin w ciągu terminów, jak:

Feb 15 
    09:00 
    12:00 
    17:00 
Feb 23 
    22:00 
    : : 

Jeśli rzeczywiście te dwa pola tak jak rzeczywistychdatetime pól, twój schemat jest wkręca się. Powinieneś mieć pole date dla daty i pole time lub integralne pole dla godziny.

Ty mógłby połączyć obie w jednym datetime dziedzinie, ale należy zrównoważyć przeciwko nieefektywność robi funkcje za rzędzie w swoim sprawozdaniu select jeśli chcesz je rozdzielić. Zazwyczaj lepiej jest zachować oddzielne pola, jeśli zamierzasz je wyraźnie wykorzystać.

Jeśli zrobić musiał użyć funkcji per-rzędu, można użyć:

date(datetime_column) 
time(datetime_column) 

wyodrębnić tylko te składniki datetimedate i time.

+0

Brzmi jak oni chcą tylko datę od eventDate i godzinę od eventHour. Jeśli godzina zdarzenia date nie była taka sama dla wszystkich wyników w tym dniu, to byłaby ona zamawiana przed godziną eventhour. –

+0

Awans dla wyjaśnienia różnicy daty/czasu dla nich. –

1

można zamówić przez tyle, ile trzeba, wystarczy użyć listę. Zamawia przez pierwszą wartość, potem drugą ... itd.

SELECT * 
    FROM table 
ORDER BY eventDate, eventHour 

Jeśli masz dwa pola datetime następnie można uzyskać tylko datę lub tylko godzinę używając coś takiego:

SELECT * 
     FROM table 
    ORDER BY DATE_FORMAT(eventDate, '%d'), DATE_FORMAT(eventHour, '%h') 
+0

Wygląda na to, że chcą tylko daty z eventDate i godziny z eventHour. Jeśli godzina zdarzenia date nie była taka sama dla wszystkich wyników w tym dniu, to byłaby ona zamawiana przed godziną eventhour. –

2

Dlaczego nie zapisać zarówno w eventDate i eventHour w tej samej dziedzinie, jeżeli są one zarówno DateTime?

Aby dostać to, co chcesz z obecnego systemu można to zrobić:

SELECT * FROM table 
    ORDER BY 
    EXTRACT(YEAR_MONTH FROM eventDate), 
    EXTRACT(DAY FROM eventDate), 
    EXTRACT(HOUR FROM eventHour) 
+0

Dodałem "rozwiązanie" do ich schematu, ale nie powinny tego robić. –

+1

Myślę, że wszyscy zgadzają się, że pytanie i konfiguracja jest dość dziwne. –

3

Czy

select * from my_table order by eventDate, eventHour 

nie działa?

+0

Wygląda na to, że chcą tylko daty z eventDate i godziny z eventHour. Jeśli godzina zdarzenia date nie była taka sama dla wszystkich wyników w tym dniu, to byłaby ona zamawiana przed godziną eventhour. –

0

Po pierwsze, jest złą praktyką, aby zapisać datę i czas w różnych dziedzinach.

W każdym razie, zakładając, że są oszczędności datę/czas w odpowiednim formacie. (tj. Format daty to rrrr-mm-dd i Czas to hh: ss)

Najpierw należy połączyć datę i godzinę, aby uzyskać wartość daty i czasu. Z technicznego punktu widzenia można zrobić ZAMÓWIENIE PRZEZ pole Datetime, ale nie jest to znowu dobra praktyka. W naszym przypadku, gdy uruchamiamy CONCAT, to jest on konwertowany na ciąg znaków, więc zestaw wyników będzie niepoprawny. Musisz więc przekonwertować go na TIMESTAMP systemu UNIX, aby wykonać zamówienie.

Jego dobrą praktyką jest uruchamianie UNIX_TIMESTAMP na polu datetime przed klauzulą ​​ORDER by.

Możesz użyć następującego zapytania.

SELECT kolumna1, kolumna2, UNIX_TIMESTAMP (CONCAT (event_date”” event_time)) jako unixtimestamp z nazwa_tabeli Zamówienia unixtimestamp desc;

Uwaga: (.. Jest to przestrzeń między EVENT_DATE i EVENT_TIME w funkcji Concat To nie jest wyświetlany poprawnie tutaj)

9

Jeśli chcesz wymienić się dane jako najnowszego EVENTDATE pierwsze, jeśli zapisy samego dnia wówczas istnieje dane zostaną posortowane według czasu tj pierwszy ostatni raz ,,

można spróbować jak poniżej

select * from my_table order by eventDate DESC, eventHour DESC 
0

Zamówienie go przez id w kolejności malejącej.

<?php $sql = "SELECT * FROM posts ORDER BY id DESC?>

To powinno działać

0

Jest to najlepszy sposób, który pracował dla mnie, po prostu przekonwertować datę do liczby dni pokojowe funkcji to_days (data) i czas na ilość sekund whith funkcja TIME_TO_SEC (czas) , na przykład:

SELECT 
    nv.destac, 
    DATE_FORMAT(nv.date_nov , '%d-%m-%Y %T') as date_order, 
    TO_DAYS(nv.date_nov) as days, 
    TIME_TO_SEC(TIME(nv.date_nov)) as seconds 

FROM 
    newsviews nv 
WHERE 
    nv.active 
ORDER BY 
     nv.destac DESC, days DESC, seconds DESC ; 

Motoryzac ES la mejor forma que funcionó par a mi, solo convertir la fecha al número de días con la función TO_DAYS (fecha) y el tiempo a la cantidad de segundos con la función TIME_TO_SEC (tiempo)

SELECT 
    nv.destacar, 
    DATE_FORMAT(nv.fecha_nov , '%d-%m-%Y %T') as fecha_orden, 
    TO_DAYS(nv.fecha_nov) as dias, 
    TIME_TO_SEC(TIME(nv.fecha_nov)) as segundos 

FROM 
    novedades nv 
WHERE 
    nv.activa 
ORDER BY 
     nv.destacar DESC, dias DESC, segundos DESC ; 
Powiązane problemy