Mam kolumnę w mojej bazie danych MySQL, która ma kilka wierszy. Jeden z tych wierszy to DATA, na przykład:2012-02-01
To, co chcę osiągnąć, to zrobić SELECT z PHP na podstawie tylko roku i miesiąca.
Logika SELECT będzie następująca:
$q="SELECT * FROM projects WHERE Date="SELECT HERE THE SPECIFIC YEAR AND MONTH"";
Konkretny miesiąc i rok zostaną przekazane ze $_POST
zmiennej, takiej jak ta$_POST['period']="2012-02";
Jak mogę to zrobić?
Odpowiedzi:
źródło
EXTRACT(YEAR_MONTH FROM Date)
?Jeśli masz
Najpierw znajdź pierwszy dzień miesiąca:
Następnie to zapytanie użyje indeksu,
Date
jeśli taki masz:Można również użyć włącznie niewyłączne interwały, które działają całkiem dobra (nie trzeba się martwić, jeśli kolumna jest
DATE
,DATETIME
alboTIMESTAMP
, ani o precyzji:Ostrzeżenie bezpieczeństwa:
Powinieneś odpowiednio uciec od tych wartości lub użyć przygotowanych instrukcji. Krótko mówiąc, użyj dowolnej metody zalecanej obecnie w PHP, aby uniknąć problemów z iniekcją SQL.
źródło
Proszę bardzo. Zostaw obliczenia PHP i zaoszczędź trochę pracy w DB. W ten sposób możesz efektywnie wykorzystać indeks
Date
kolumny.EDYCJA
Zapomniałem o konwersji znacznika czasu systemu Unix.
źródło
$end = strtotime($date .' 1 month - 1 second');
źródło
Załóżmy, że masz pole bazy danych created_at, w którym pobierasz wartość ze znacznika czasu. Chcesz wyszukiwać według roku i miesiąca od daty utworzenia.
źródło
Tutaj ZNAJDŹ rekord według MIESIĄCA i DATY w mySQL
Oto Twoja wartość POST
$_POST['period']="2012-02";
Po prostu rozbij wartość myślnikiem
$Period = explode('-',$_POST['period']);
Pobierz tablicę z wartości rozstrzelenia:
Array ( [0] => 2012 [1] => 02 )
Wpisz wartość w zapytaniu SQL:
SELECT * FROM projects WHERE YEAR(Date) = '".$Period[0]."' AND Month(Date) = '".$Period[0]."';
Uzyskaj wynik według miesiąca i roku.
źródło
aby uzyskać wartości miesiąca i roku z kolumny daty
źródło
Możesz zrobić tak:
źródło
Logika będzie wyglądać następująco:
LIKE
Operator wybierze wszystkie wiersze, które zaczynają się$_POST['period']
następnie łącznik i dzień monthttp://dev.mysql.com/doc/refman/5.0/en/pattern-matching.html - dodatkowe informacje
źródło
Oto zapytanie, którego używam i zwróci każdy rekord w okresie jako sumę.
Oto kod:
Zawiera listę każdego emp_nr i sumę godzin miesięcznych, które zgromadziły.
źródło
możesz to zrobić, zmieniając $ q na to:
źródło
Tak, to działa, ale zwraca tylko jeden wiersz, podczas gdy jest kilka wierszy do pobrania przy użyciu tylko wybranych kolumn. Podobnie jak SELECT Title, Date FROM mytable WHERE YEAR (Date) = 2017 AND MONTH (Date) = 09 zwraca tylko jeden wiersz.
źródło