2013-11-21 15 views
17

Dzień dobry.MySQL: Jak wybrać rekordy na ten tydzień?

Mam tabelę temp ze strukturą na sqlfiddle:

id(int 11 primary key) 
name(varchar 100) 
name2(varchar 100) 
date(datetime) 

chciałbym uzyskać rekord w tym tygodniu, przykład jeśli teraz 21.11.2013 chciałbym wszystkie wiersze na 18.11.2013 do 24.11.2013 (na tydzień)

teraz widzę kolejny algorytmu:

1) obtain weekday 
2) calculate how many days ago was Monday 
3) calculate the date Monday 
4) calculate future date Sunday 
5) make a request on date 

Powiedz mi proszę, czy istnieje krótszy algorytm (najlepiej w zapytaniu MySQL)?

Dodaj pytanie: dlaczego it query wybierz zapis na datę 17.11.2013 (niedziela) - 23.11.2013 (sobota) i jak się zapisy na datę 18.11.2013 (poniedziałek) - 24.11.2013 (niedziela)?

zapytania:

select * from temp 
where yearweek(`date`) = yearweek(curdate()) 

Dzięki!

+0

próbowałeś coś ??? – NoobEditor

+1

@Mayank nie widzisz? piszę znalezisko algorytmu. lub neee napisać coe z algorytmem? –

+0

@ YourCommonSense powiedz mi, proszę, dlaczego chcesz usunąć tag mysqli? –

Odpowiedz

42

Zastosowanie YEARWEEK():

SELECT * 
FROM your_table 
WHERE YEARWEEK(`date`, 1) = YEARWEEK(CURDATE(), 1) 
+1

co jest najlepszy? WEEKOFYEAR lub yearweek? –

+2

z 'yearweek()' możesz podać dodatkowy parametr, od którego zaczyna się dzień tygodnia. –

+1

powiedz mi proszę, dlaczego zapytanie o wybór rekordu w dniu 17.11.2013 (niedziela) - 23.11.2013 (sobota) i jak uzyskać zapisy w dniu 18.11.2013 (poniedziałek) - 24.11.2013 (niedziela)? –

6
SELECT id, name, date 
FROM table 
WHERE YEARWEEK(date)=YEARWEEK(NOW()); 
+1

co jest najlepsze? WEEKOFYEAR lub yearweek? –

+5

Używaj YEARWEEK .. Jeśli używasz WEEKOFYEAR otrzymasz także rekordy z poprzednich lat ... – Ramesh

0

Aby wybrać rekordy dnia, tygodnia i miesiąca stosowania w ten sposób:

function my_func($time, $your_date) { 
if ($time == 'today') { 
    $timeSQL = ' Date($your_date)= CURDATE()'; 
} 
if ($time == 'week') { 
    $timeSQL = ' YEARWEEK($your_date)= YEARWEEK(CURDATE())'; 
} 
if ($time == 'month') { 
    $timeSQL = ' Year($your_date)=Year(CURDATE()) AND Month(`your_date`)= Month(CURDATE())'; 
} 

$Sql = "SELECT * FROM your_table WHERE ".$timeSQL 
return $Result = $this->db->query($Sql)->result_array(); 
} 
0

Można to zrobić przez następujące metody

SELECT DATE_FORMAT("2017-06-15", "%U"); 

Uzyskaj numer tygodnia (od 0 0 do 53) Gdzie (niedziela, 1 dzień i poniedziałek, ostatni dzień tygodnia)

Może być przydatny dla ciebie.

przykład:

SELECT DISTINCT DATE_FORMAT('dates', '%U') AS weekdays FROM table_name; 
Powiązane problemy