2017-07-27 7 views
0

私のコードで助けが必要です。私はstop_dateの要素のリストをデータベースに保存して、その行を削除したいと思っています。私は$current_programme_dateという変数を使用していますが、データベースから要素のリストを取得しています。変数$current_programme_dateを使用して要素を検索したいところで、データベース内で削除したい行を見つけることができます。ここでデータベース内の要素を検索して行を削除します

はここ$current_programme_date

20170727060000 
20170727091500 
20170727100000 
20170727110000 
20170727114500 
20170727121500 
20170727130000 
20170727133000 
20170727134500 
20170727143000 

ための要素である$sqlの結果である:ここで

DELETE from programs where stop_date ='20170727011000' 
DELETE from programs where stop_date ='20170727021000' 
DELETE from programs where stop_date ='20170727030000' 
DELETE from programs where stop_date ='20170727035000' 
DELETE from programs where stop_date ='20170727050500' 
DELETE from programs where stop_date ='20170727013000' 
DELETE from programs where stop_date ='20170727022000' 
DELETE from programs where stop_date ='20170727040500' 
DELETE from programs where stop_date ='20170727050000' 
DELETE from programs where stop_date ='20170727050500' 
DELETE from programs where stop_date ='20170727031000' 
DELETE from programs where stop_date ='20170727040000' 
DELETE from programs where stop_date ='20170727044500' 
DELETE from programs where stop_date ='20170727051000' 
DELETE from programs where stop_date ='20170727053500' 
DELETE from programs where stop_date ='20170727020000 

はPHPです:

<?php 

//open the database File 
$db = new SQLite3('myChannel.db'); 

if(!$db) 
{ 
    echo $db->lastErrorMsg(); 
} 
$sql = "SELECT * FROM programs"; 

$results = $db->query($sql); 
while($row = $results->fetchArray(SQLITE3_ASSOC)) 
{ 
    $current_time = (date('Ymdhis')); 
    $current_programme_date = ($row['stop_date']); 

    if($current_time > $current_programme_date) 
    { 
    $sql = "DELETE from programs where stop_date ='$current_programme_date'"; 
    print_r($sql); 
    } 
} 
?> 

私が何を期待していますどのような変数を使用してデータベースから各要素を探したいですか?を参照して、現在の時刻と比較できるかどうかを確認します。たとえば、プログラムの日付書式が終了した場合、$current_programme_dateの形式は20170727060000で、現在の日付形式は20170727180300です。 。

私のコードでは、すべてのデータをフェッチしてすべての行を削除するため、変数を使用しているときにデータベース内で正しい要素が見つからないということが起こります。現在のプログラムの日付形式を現在の日付形式と比較しているときにデータベース内の正しい行を探したい場合20170727180300時間が既に過ぎているので、現在のプログラムの日付を削除することなくすべての行を削除できます私の現在の日付形式から渡されていません。

変数を使用しているときにデータベース内の行を削除する要素を見つける方法を教えてください。

編集:これを試しても、データベースの行は削除されませんでした。

$sql = "SELECT * FROM programs"; 

$results = $db->query($sql); 
$stop_date = []; 

while($row = $results->fetchArray(SQLITE3_ASSOC)) 
{ 
    $current_time = date('YmdHis'); 
    $current_programme_date = strtotime($row['stop_date']); // see here :) 

    if($current_time > $current_programme_date) 
    { 
     $stop_date[] = $current_programme_date; //push dates here 
    } 
} 
$sql = 'DELETE FROM programs WHERE stop_date IN ("' . implode('", "', $stop_date) . '")'; 
print_r($sql); 

//finally delete all rows with that stop_date 
$db->changes(); 
echo "deleted succcessfully!"; 

答えて

0

私はそれがcomma(,)implode、あなたは一人ひとりの日付を検索し、配列にstop_dateを取得するには あなたのループ機能を使用one.Justずつ削除する必要があると思うし、最終的に単一の削除を実行しないでください行を削除するためにこのようなクエリを実行します。

//open the database File 
$db = new SQLite3('myChannel.db'); 

if(!$db) 
{ 
    echo $db->lastErrorMsg(); 
} 
$sql = "SELECT * FROM programs"; 

$results = $db->query($sql); 
$stop_date = []; 
while($row = $results->fetchArray(SQLITE3_ASSOC)) 
{ 
    $current_time = date('YmdHis'); 
    $current_programme_date = strtotime($row['stop_date']); // see here :) 

    if($current_time > $current_programme_date) 
    { 
    $stop_date[] = $current_programme_date; //push dates here 
    //print_r($sql); 
    } 
} 

// make your delete query here 
$sql = 'DELETE FROM programs 
      WHERE stop_date IN ("' . implode('", "', $stop_date) . '")'; 

//finally delete all rows with that stop_date 
$db->exec($sql); 
+0

私は 'データベースから単一の要素を検索し、私の現在の時刻の形式の日付と日付を比較することができますどのように私の例を示してくださいすることができ20170727180300'私は、行を削除し、次の要素を見つけて、そのことができる前にに? –

+0

@RobertJones私はあなたもこの行を修正する必要があると思います。(日付( 'YmdHis')); '大文字の' H'を参照してください12hrのために24時間 'h' –

+0

ああ、ありがとう、時刻が既に渡されているので、現在の日付形式と比較するときにデータベース内の正しい日付形式を探して、全体の行を削除せずに正しい日付形式を削除できますか? –

関連する問題