2016-08-29 18 views
1

私は薬局の店舗プロジェクトを開発していますが、期限切れの薬剤の総数を決定するのに問題があります。 DBから私は持っています:今日の日付の確定方法phpのdbからの日付

+----+----------+--------+------------+ 
| id | drug_nam | amount | exp  | 
+----+----------+--------+------------+ 
| 1 | M and T | 200 | 04/15/2016 | 
| 2 | VIT C |  20 | 05/25/2016 | 
| 3 | Pana  |  10 | 01/03/2016 | 
| 4 | Lonat | 1200 | 08/25/2017 | 
| 5 | ProC  | 100 | 05/25/2017 | 
+----+----------+--------+------------+ 

ここで私が必要とするのは、DBから期限切れ薬物の数を数えるPHPスクリプトです。 <?php $d = date('m/d/Y'); ?>を使用してDBから決定します。

私は以下のコードを使用するが、それはあなたがあなたのexpカラムのテキストまたはvarchar型のいくつかの並べ替えを使用思わあなたのテーブルからわずか2

<?php 
$d = date('m/d/Y'); 
$result = mysqli_query($conn, "SELECT count(exp) FROM products where exp < $d "); 

while($row = mysqli_fetch_array($result)) 
{ 
    echo $row['count(exp)']; 
} 
+0

ここでは、どの列の種類を使用しますか? –

+0

'varchar(500)'を使用しました –

+1

あなたの日付書式はソートできません。 DATEデータ型を使うか、 'STR_TO_DATE()'関数でフォーマットを変換してください。 –

答えて

0

文字列ではなく日付でフィルタリングする場合は、文字列の日付表現を日付値に変換する必要があります。 このクエリは動作するはずです:

SELECT count(exp) FROM products where STR_TO_DATE(exp, '%d/%m/%Y') < $d 

主な欠点は、MySQLはこの場合には、インデックスを使用することはできませんです。ソリューションの1つは、列をvarchar(50)からDATETIMEに変換することです。この場合、元のクエリを使用することができます。

0

を数えます。 mysqlの日付形式はyyyy-mm-ddのようにしてください。 dateにごexp列を変更すると良いことがあります

$d = date('Y-m-d'); 

に以下の行

$d = date('m/d/Y'); 

を変更してください。

+0

に変更する必要があります。私がそれを変更した場合、私のスクリプトを使用して期限切れの薬剤を正確に数えるでしょうか? –

+0

はいそうです。 'exp'カラムは最初に' varchar'であってはなりません。 –

関連する問題