Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [MySQL] Sortowanie według dat
aras785
post 5.01.2018, 00:15:30
Post #1





Grupa: Zarejestrowani
Postów: 859
Pomógł: 177
Dołączył: 29.10.2009

Ostrzeżenie: (0%)
-----


Cześć.

Jak napisać zapytanie tak aby najpierw pokazało daty w przód (ASC), a później całą resztę (DESC)

Moje zapytanie:


  1. SELECT SQL_CALC_FOUND_ROWS wp_posts.ID,wp_postmeta.meta_value
  2. FROM wp_posts
  3. INNER JOIN wp_postmeta ON (wp_posts.ID = wp_postmeta.post_id)
  4. INNER JOIN wp_postmeta AS mt1 ON (wp_posts.ID = mt1.post_id)
  5. INNER JOIN wp_postmeta AS mt2 ON (wp_posts.ID = mt2.post_id)
  6. INNER JOIN wp_postmeta AS mt3 ON (wp_posts.ID = mt3.post_id)
  7. INNER JOIN wp_postmeta AS mt4 ON (wp_posts.ID = mt4.post_id)
  8. INNER JOIN wp_postmeta AS mt5 ON (wp_posts.ID = mt5.post_id)
  9. WHERE 1=1
  10. AND (wp_postmeta.meta_key = 'data_od'
  11. AND ((mt1.meta_key = 'post_jest_wydarzeniem'
  12. AND mt1.meta_value = '1')
  13. AND (((mt2.meta_key = 'data_od'
  14. AND mt2.meta_value >= '20180101')
  15. AND (mt3.meta_key = 'data_od'
  16. AND mt3.meta_value <= '20180131') )
  17. OR ((mt4.meta_key = 'data_do'
  18. AND mt4.meta_value >= '20180101')
  19. AND (mt5.meta_key = 'data_do'
  20. AND mt5.meta_value <= '20180131') ) ) ))
  21. AND wp_posts.post_type = 'page'
  22. AND (wp_posts.post_status = 'publish'
  23. OR wp_posts.post_status = 'future'
  24. OR wp_posts.post_status = 'draft'
  25. OR wp_posts.post_status = 'pending'
  26. OR wp_posts.post_status = 'private')
  27. GROUP BY wp_posts.ID
  28. ORDER BY
  29. wp_postmeta.meta_value >= 20180104 ASC,
  30. wp_postmeta.meta_value < 20180104 DESC
  31. LIMIT 0,
  32. 8


Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 2)
trueblue
post 5.01.2018, 08:42:44
Post #2





Grupa: Zarejestrowani
Postów: 6 806
Pomógł: 1828
Dołączył: 11.03.2014

Ostrzeżenie: (0%)
-----


Może tak?
  1. ORDER BY
  2. (CASE WHEN wp_postmeta.meta_value >= 20180104 THEN wp.postmeta.meta_value END) ASC,
  3. (CASE WHEN wp_postmeta.meta_value < 20180104 THEN wp.postmeta.meta_value END) DESC


--------------------
Go to the top of the page
+Quote Post
SmokAnalog
post 11.01.2018, 03:00:19
Post #3





Grupa: Zarejestrowani
Postów: 1 707
Pomógł: 266
Dołączył: 3.07.2012
Skąd: Poznań

Ostrzeżenie: (0%)
-----


Można dużo prościej:

  1. ORDER BY `wp_postmeta`.`meta_value` < UNIX_TIMESTAMP(),
  2. ABS(`wp_postmeta`.`meta_value` - UNIX_TIMESTAMP())


Albo chyba wydajniej:

  1. ORDER BY ABS(`wp_postmeta`.`meta_value` - UNIX_TIMESTAMP()) - (`wp_postmeta`.`meta_value` >= UNIX_TIMESTAMP()) * 9999999999
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 19.07.2025 - 16:04