2016-12-31 72 views
-1

我想在MYSQL中删除数据或更新数据。使得如果柱message_deleted_by在字符串IN被发现()那么查询应该删除行,其中所述WHERE条款(滤波)是真ELSE查询应该更新message_tablemessage_deleted_by一些数据。 ...全部在相同的查询如何在MYSQL中使用IF()和ELSE()语句

如果这可以实现请帮助。 I'v尝试过,但它输出错误。

$token = mysqli_real_escape_string($dbc_conn,encode64(getsecreteToken($_POST["token"]))); 
    $mid = mysqli_real_escape_string($dbc_conn,$_POST["mid"]); 
    $rid = mysqli_real_escape_string($dbc_conn,$_POST["rid"]); 
    $sid = mysqli_real_escape_string($dbc_conn,$_POST["sid"]); 
    $group = implode(",",array($rid,$sid)); 

    $IsLoggIn = '2'; 

    $SQL = " 
       IF(
       SELECT message_deleted_by AS mdb FROM $message_tatable 
       WHERE (
         m.sender_id='$IsLoggIn' AND m.recipient_id='$rid' 
         ) AND 
         m.token='$token' AND m.id='$mid' 

       ) mdb IN($group) THEN 

       DELETE m,mf 
        FROM $message_tatable m 
         LEFT JOIN $message_files_tb mf ON 
         m.token=mf.token 


         WHERE (
         m.sender_id='$IsLoggIn' AND m.recipient_id='$rid' 
         ) AND 
         m.token='$token' AND m.id='$mid'; 

       ELSE 
        UPDATE $message_tatable SET message_deleted_by='$IsLoggIn' 
        WHERE (
          m.sender_id='$IsLoggIn' AND m.recipient_id='$rid' 
          ) AND 
          m.token='$token' AND m.id='$mid'; 

       END IF; 
        "; 

    //QUERY database 
    $query = mysqli_query($dbc_conn,$SQL); 
    die(mysqli_error($dbc_conn)); 
+0

'DELETE'和'UPDATE'不能合并。您可以在存储过程中编写逻辑。但我只会运行两个查询。 –

回答

0

试试这个,

UPDATE $message_tatable m 
LEFT JOIN $message_files_tb mf 
ON m.token=mf.token 
SET m=NULL, 
    mf=NULL 
WHERE m OR mf=SELECT message_deleted_by FROM $message_tatable IN($group) 
AND m.sender_id='$IsLoggIn' AND m.recipient_id='$rid' 
AND m.token='$token' AND m.id='$mid' 
+0

它给出以下错误:您的SQL语法中有错误;检查与你的MariaDB服务器版本相对应的手册,以便在'SELECT message_deleted_by FROM messages IN(18,2)AND m.sender_id ='2'AND m.rec'at line 6附近使用正确的语法 –