Saya memiliki kolom di mySQL DB saya yang memiliki beberapa baris. Salah satu baris ini adalah DATE, seperti ini:2012-02-01
Apa yang ingin saya capai adalah melakukan PILIHAN dengan PHP hanya berdasarkan tahun dan bulan.
Logika SELECT adalah sebagai berikut:
$q="SELECT * FROM projects WHERE Date="SELECT HERE THE SPECIFIC YEAR AND MONTH"";
Bulan dan tahun tertentu akan dilewatkan dari $_POST
variabel, seperti ini$_POST['period']="2012-02";
Bagaimana saya bisa melakukannya?
Jawaban:
sumber
EXTRACT(YEAR_MONTH FROM Date)
?Jika Anda memiliki
Pertama, temukan hari pertama setiap bulan:
Kemudian kueri ini akan menggunakan indeks
Date
jika Anda memilikinya:Seseorang juga dapat menggunakan interval inklusif-eksklusif, yang berfungsi cukup baik (Anda tidak perlu khawatir jika kolomnya
DATE
,DATETIME
atauTIMESTAMP
, atau tentang presisi:Peringatan keamanan:
Anda harus melepaskan nilai-nilai ini dengan benar atau menggunakan pernyataan yang telah disiapkan. Singkatnya, gunakan metode apa pun yang direkomendasikan hari ini di PHP, untuk menghindari masalah injeksi SQL.
sumber
Ini dia. Biarkan komputasi ke PHP dan simpan beberapa pekerjaan DB Anda. Dengan cara ini Anda dapat menggunakan indeks pada
Date
kolom secara efektif .EDIT
Lupa konversi stempel waktu Unix.
sumber
$end = strtotime($date .' 1 month - 1 second');
sumber
Misalkan Anda memiliki bidang database create_at Di mana Anda mengambil nilai dari timestamp. Anda ingin mencari berdasarkan Tahun & Bulan dari tanggal create_at.
sumber
Di sini, TEMUKAN catatan berdasarkan MONTH dan DATE di mySQL
Inilah nilai POST Anda
$_POST['period']="2012-02";
Hanya, meledak nilai demi setrip
$Period = explode('-',$_POST['period']);
Dapatkan array dari nilai ledakan:
Array ( [0] => 2012 [1] => 02 )
Masukkan nilai dalam SQL Query:
SELECT * FROM projects WHERE YEAR(Date) = '".$Period[0]."' AND Month(Date) = '".$Period[0]."';
Dapatkan Hasil sebelum MONTH dan YEAR.
sumber
untuk mendapatkan nilai bulan dan tahun dari kolom tanggal
sumber
Anda bisa melakukan seperti ini:
sumber
Logikanya adalah:
The
LIKE
Operator akan memilih semua baris yang dimulai dengan$_POST['period']
diikuti oleh dasbor dan hari mont tersebuthttp://dev.mysql.com/doc/refman/5.0/en/pattern-matching.html - Beberapa informasi tambahan
sumber
Berikut adalah kueri yang saya gunakan dan itu akan mengembalikan setiap catatan dalam periode sebagai jumlah.
Ini kodenya:
Ini mencantumkan setiap emp_nr dan jumlah jam bulanan yang telah mereka kumpulkan.
sumber
Anda dapat melakukannya dengan mengubah $ q menjadi ini:
sumber
Ya ini berfungsi, tetapi mengembalikan satu baris saja sementara ada beberapa baris untuk diambil hanya menggunakan kolom yang dipilih. Seperti SELECT Title, Date FROM mytable WHERE YEAR (Date) = 2017 AND MONTH (Date) = 09 hanya mengembalikan satu baris.
sumber