簡體   English   中英

根據其他列的值在mysql中排序

[英]Ordering in mysql based on values of other columns

這可能是一個XY問題,所以我將一開始嘗試進行解釋:

客戶在其網站上有一個事件頁面,可以在CMS中管理他的事件。 他需要能夠選擇活動的開始日期和結束日期,以及開始日期或結束日期是否領先。

有些活動大約持續半年,所以可以說6月1日至12月1日。 這些事件必須顯示在結果中,但是由於它們運行了很長時間,因此他不希望它們始終是您在事件頁面上看到的第一個事件,因為事件頁面按開始日期排序。 這就是為什么他可以選擇什么日期。 如果在此示例中結束日期在前,則在6月之后開始的其他事件在列表中的顯示必須比該事件要高,但是在開始日期在前的情況下,如果當前日期晚於6月,但在列表中顯示的日期必須比開始日期晚的事件或結束日期早的事件高。

這有意義嗎?

這些是我目前擁有的相關列

event_id           (int)
event_name         (varchar)
event_startdate    (int, unix timestamp through PHP)
event_enddate      (int, unix timestamp through PHP)
event_date_leading (int, 1 for enddate, 0 for startdate)

用簡單的英語來說,我想我正在尋找這樣的查詢,但是我無法將其翻譯成MySQL:

select all events from events_table but dont show the events that have event_date_leading 0 and the startdate is in the past, then, place events that have event_date_leading 0 higher than events that have events_date_leading 1 while their event_startdate is actually earlier

看起來我的查詢中需要某種雙重排序,但我不知道是否可能。

到目前為止,我一直在嘗試檢索所有事件,然后使用PHP檢查它們的日期和前導值,並根據此結果顯示/不顯示它們,但這仍然無法讓我按照自己的方式進行排序。

誰能指出我正確的方向?

SELECT * FROM events_table WHERE event_startdate < NOW() AND event_date_loading=0 ORDER BY event_startdate ASC,event_date_leading DESC,event_startdate

這將選擇開始日期在將來且event_date_lead等於0的所有事件。還將首先在開始日期ASCending和Descending到event_date_ Lead中對結果進行排序。

如果它不起作用,請設置一個sqlfiddle並通過您嘗試的示例代碼向我們發送所需的結果。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM