2014-01-30 3 views
1

У меня есть выпадающий список, который выбирает записи из базы данных по годам и месяцам. Это работает правильно, год и только 1 месяц. Мне нужно получить все Januanry до июньских записей или с июля по декабрь по году. Помогите?Получить записи в базе данных по годам и месяцам

Мой формат даты гггг-мм-дд

<form id="form1" name="form1" action="<?php $_SERVER['PHP_SELF']?>" method="post"> 
<?php 
$startYear = 2013; 
$curYear = date('Y'); 
    echo'<select name="year">'; 
    foreach (range($startYear, $curYear) as $year) { 
    echo '<option>'.$year.'</option>'; 
    } 
    echo'</select>'; 

    echo'<select name="month">'; 
    for ($x=1; $x<=12; $x++) 
    { 
    $val=strlen($x); 
    if($val==1) 
    { 
    echo '<option value="'.'0'.$x.'">'.'0'.$x.'</option>'; 
    } else { 
    echo '<option value="'.$x.'">'.$x.'</option>'; 
    } 
    } 
    echo'</select>'; 
?> 
<input type="submit" name="date" value="date"/> 
</form> 

<?php 
    $year = $mysqli->real_escape_string($_POST["year"]); 
    $month = $mysqli->real_escape_string($_POST["month"]); 

    echo $year.'-'.$month; 
    $result1 = $mysqli->query("SELECT po_date, rfq, shop, nego, shop, po_number, counter FROM purchase_order WHERE po_date LIKE '$year-$month-__' GROUP BY counter ORDER BY po_date"); 
+0

Что такое тип поля «po_date»? –

+0

Возможный дубликат [Выбор диапазона выбора даты в MySQL] (http://stackoverflow.com/questions/4897133/mysql-select-date-range-issue) –

+0

@FezVrasta type is date – user3097736

ответ

1

Если вы хотите получать отчеты за определенный месяц и год, использовать month и year функции на поле даты.

WHERE Year(po_date) = $year 
and (Month(po_date) between 1 and 6 -- for JAN to JUN 
     OR 
     Month(po_date) between 7 and 12 -- for JUL to DEC 
    ) 

И заявление

Month(po_date) between 1 and 6 -- for JAN to JUN 
OR 
Month(po_date) between 7 and 12 -- for JUL to DEC 

эквивалентно

Month(po_date) between 1 and 12 -- for JAN to DEC 

И, следовательно, вы не должны использовать как между условиями.
Вместо этого измените нижнее и верхнее граничные значения между предложением по желанию.

Пример 1:
Если вы хотите записи между april и august включительно, попробуйте

Month(po_date) between 4 and 8 -- for APR to AUG, both inclusive 

Пример 2:
Если вы хотите записи в течение определенного месяца, скажем, ' октябрь ', попробуйте

Month(po_date) = 10 -- for OCT 

Если вы все еще хотите использовать between для одного выхода месяца, попробуйте

Month(po_date) between 10 and 10 -- for OCT 
+0

это не повлияло на мой формат даты? Я использую mysql – user3097736

+0

Мой ответ тоже в MySQL. Это не повлияет на ваши данные, потому что это только 'select'. –

+0

Пожалуйста, не используйте свой ответ, чтобы попросить разъяснения, это может быть довольно запутанным. Для этого нужны комментарии. – vascowhite

Смежные вопросы