2016-10-13 8 views
1

私は最後の10個のメッセージを表示する非常に簡単なミニチャットプログラム(php/mysql)に取り組んでいます。PHPを使ってmysqlのIDが最も高い行を削除します

最後のメッセージを削除するボタンを追加しました(フォームを使用して、下にあるようなphpファイルになります)。

私は実際にphpmysqlの初心者です。なぜ、うまくいかないのか分かりません。

は、私のコードは、次のとおりです。

<?php 
    // Create connection 
    $cn = new mysqli("localhost","root","","test"); 

    // Check connection 
    if($cn->connect_error) 
    { 
     echo "Connection failed : " . $cn->connect_error; 
    } 

    $sql = "DELETE FROM `minichat` WHERE `minichat`.`id` = ('SELECT MAX(`id`) FROM `minichat`')"; 

    if($cn->query($sql) === TRUE){ 
      echo "Deleted succesfully"; 
    } 
    else 
    { 
     echo "Error deleting record: " . $cn->error; 
    } 

    //header('Location: connexion.php'); 
?> 
+1

...条件は、ユーザーが唯一の彼/彼女の自身のコメントを削除することができますを確認します? – sagi

+0

エラーを表示するか、何ができないかを説明してください –

+0

行を削除せず、このコードでエラーを送信しませんが、「削除済み」と表示されます –

答えて

5

サブクエリ

あなたは、テーブルから削除し、 サブクエリで同じテーブルから選択することはできません。

ので、代わりにあなたのような何かを行う必要があります。

DELETE FROM minichat ORDER BY id DESC LIMIT 1 

をそして、あなたはおそらく動作しません何

+1

ああ –

+0

DELETE特権が与えられていて、彼らが使用したいと思っている "ボタン"は実際には;-)その質問の下の私のコメントに従って働いています。 –

+0

@ Fred-ii-私はちょうどそれを仮定します;-) – jeroen

3

あなたがそうでなければ、あなたがWHERE minichatを持つ副選択

"DELETE FROM `minichat` WHERE `minichat`.`id` = (SELECT MAX(`id`) FROM `minichat`)" 

周りの単一引用符を削除する必要があります。 idは=「マイル文字列テキスト」

、あなたがサブクエリから削除することができるという事実のためにあなたがこれはあなたが試みることができるサブクエリ

+0

ニースキャッチ、それを見ていない。 – sagi

+0

これはうまくいきません、同じ結果が "削除されました"が実際に行を削除するわけではありません。 –

0

と削除の制限を超えると予想されて

DELETE 
FROM `minichat` 
WHERE `minichat`.`id` = (select t.id from (SELECT MAX(`id`) FROM `minichat`) t) 

を試すことができますあなたが望むIDを収集した変数を設定します。次に、その変数を削除するIDとして参照できます。 DELETE Syntax上のマニュアルによると

+0

実用的でないdbに移動して、最大IDを求めてから、別のクエリーを送信して削除します。 –

+0

その目的のために準備されたクエリを使用する必要がありますか? –

+0

ええ、そうです:$ x = SELECT MAX( 'id')FROM' minichat') "将来の参照のために、クエリがうまくいかない場合は、SQLエディタを開き、そこで実行して、動作するかどうか確認してください。 – DatBundah

関連する問題