2013-05-15 6 views
1

У меня плохое понимание if/else в MySQL. У меня есть простая база данных Messaging, в которой я хочу удалить сообщение (строку), но ТОЛЬКО, если оба пользователя удалили это с их конца.MySQL и PHP if/else

Так databate выглядит следующим образом:

----|---------|-------------|------------ 
mid | message | user1delete | user2delete 
----|---------|-------------|------------ 
1 | hi! |  no  | yes 
----|---------|-------------|------------ 

Так что я хочу посмотреть на «середине» 1, если другой пользователь уже удален (скрыть) сообщение, удалить строку. Иначе просто ОБНОВЛЯЙТЕ «да» у нужного пользователя. Возможно ли это сделать в одном запросе MySQL, или я должен использовать инструкцию PHP if/else с несколькими запросами?

Что-то, что будет выглядеть ложь:

SELECT * FROM MESSAGES 
    IF user1delete = NULL or "no" 
     THEN UPDATE user2delete = "yes" 
    ELSE IF user1delete = "yes" AND user2delete = "yes" 
     THEN DELETE where mid = 1 

Спасибо! (Я надеюсь, что мой вопрос ясен ...)

EDIT: Я имел в виду, чтобы "обновить" да ...

+0

Просто выберите все строки, которые вы хотите, на основе критериев, которые вам нужны (оба подтверждения подтверждения «да», я предполагаю) и удалить их. Это довольно простой SQL. – GordonM

+0

Не слишком ясно. Был ли один из столбцов нулевым? Кажется, что вы хотите что-то вроде этого: DELETE FROM table WHERE user1delete = 'yes' и user2delete = 'yes' –

+0

Если дубликаты недействительны, то добавление уникального ключа в середину, таким образом вы получите ошибку при вставке, и вы может с этим справиться. – Orangepill

ответ

0

не удается удалить строку или обновить ту же строку в одном запросе. Вы можете написать хранимую процедуру, если вы отчаянно хотите сделать это в одном вызове базы данных. Но имейте в виду, даже если вы делаете это с помощью одного вызова базы данных на SP из PHP, вы все еще выполняете несколько запросов.

Лучшее решение: Буквально удалять данные никогда не бывает хорошо. Создайте еще один столбец для удаленных сообщений и отметьте их как удаленные, если оба пользователя удалили его. Это позволит вам сохранить исторические данные +, вы можете сделать свой запрос в одном обновлении.

+0

Спасибо. Мне нравится идея удаленной колонки. – StefGou

0
DELETE FROM messages WHERE user1delete="yes" and user2delete="yes"; 

Это то, что вы после этого?

Edit: очевидно, добавить в инструкцию WHERE mid=1 только для этого сообщения

+0

Спасибо, это я могу сделать. Но это часть if/else, которая меня обманывает. Я мог бы сделать это в php, но мне было интересно, можно ли сделать это только в одном запросе в MySQL. – StefGou

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