Почему этот код не работает так, как должен? Когда я удваиваю одну из записей, ник или адрес электронной почты, она выпадает из двойной новой записи.

Но если и псевдоним, и адрес электронной почты совпадают, он просто не удалит последнюю запись, а просто вставит повторяющуюся строку.

Примечание. У меня есть только автоматически увеличивающееся значение для каждой строки и нет отметки времени, поэтому я не могу просто удалить последнюю запись, я должен убедиться, что последняя вставленная запись удалена.

РЕДАКТИРОВАТЬ: Можно было бы предположить, что я мог бы использовать только верхний оператор if, но если бы я это сделал, ОБЕ записи были бы удалены (если бы я вынул часть И, конечно) ...

Мой код прямо сейчас (ПЕРВИЧНЫЙ КЛЮЧ - KNR):

if(($doubleEmail || $doubleNickname) && !($doubleEmail && $doubleNickname))
        {
            mysql_query("DELETE FROM ".$sql['table']
            . " WHERE ".$sql['email']."='".mysql_real_escape_string($email)  
            . "' AND ".$sql['nick']."='".mysql_real_escape_string($nickName)."'");
            echo "double entry";
        }
elseif($doubleEmail && $doubleNickname) 
        {
            mysql_query("DELETE FROM ".$sql['table']." WHERE KNR > 
            ( ( SELECT MAX( KNR )-1 FROM ".$sql['table']."))");
            echo "double entry";

        }
0
clockw0rk 19 Янв 2014 в 07:50
KNR - это первичный ключ вашей строки?
 – 
Ke Vin
19 Янв 2014 в 08:12
Да, это. Я отредактирую это
 – 
clockw0rk
19 Янв 2014 в 08:13
Почему бы вам просто не сделать ник и адрес электронной почты уникальным ключом, чтобы операция дублирования вставки была запрещена вообще?
 – 
serakfalcon
19 Янв 2014 в 08:52
Хорошо, попробую оба ответа. Спасибо
 – 
clockw0rk
19 Янв 2014 в 09:03

1 ответ

Лучший ответ

Я бы предложил использовать

DELETE FROM `YOUR_TABLE` ORDER BY `YOUR_PRIMARY_KEY` DESC LIMIT 1

Ваш запрос генерирует ошибку 1093 sql. См. Аналогичный вопрос: Удаление строки на основе максимального идентификатора

(Замечание: всегда избегайте каждого значения в ваших запросах, даже если они не являются динамическими и поступают из файлов конфигурации.)

0
Community 23 Май 2017 в 13:31