Использование AND в операторах Case в MYSQL

Итак, цель этого запроса — проверить, существует ли запись во второй таблице, и если она действительно обновляет тип на дубликат, если нет, то обновляет его до исходного. Я должен проверить три поля, и все они должны быть правдивыми, чтобы квалифицироваться как дубликат записи.

На этом этапе он проверяет правильную таблицу, находит, есть ли дубликат, и меняет статус с 1 на 2 для всех 9 записей, которые я проверяю, однако он только изменяет первую запись на «дубликат», даже если они все дубликаты.

Могу ли я использовать «И» в описании дела? Если нет, есть ли у кого-нибудь предложение, как я могу изменить этот запрос для работы? Я пытался использовать подзапрос SELECT, но это не сработало.

Вот код:

$query = "UPDATE first_table f
LEFT
JOIN second_table s
ON f.co_id = s.co_id
SET f.status = 2, f.type =
CASE
WHEN s.ltt = f.ltt
AND s.lang = f.lang
AND s.units = f.units
THEN 'duplicate' ELSE 'original'
END
WHERE f.co_id = :coid AND f.type = :rtype AND f.status = :status";
$params = array();
$params[] = array(':coid', $co_id, 'int');
$params[] = array(':rtype', 'uploads', 'str');
$params[] = array(':status', '1', 'int');
$db->query($query, $params);

2

Решение

Мне удалось воспользоваться небольшим советом от Али Аршада и sqlfiddle … и придумал решение!

 $query = "UPDATE first_table f
LEFT
JOIN second_table s
ON f.co_id = s.co_id
SET f.status = 2, f.type =
CASE
WHEN (SELECT f.prop_id FROM first_table f
WHERE s.ltt = f.ltt AND s.lang = f.lang
AND s.units = f.units)
THEN 'duplicate' ELSE 'original'
END
WHERE f.co_id = :coid AND f.type = :rtype AND f.status = :status";
$params = array();
$params[] = array(':coid', $co_id, 'int');
$params[] = array(':rtype', 'uploads', 'str');
$params[] = array(':status', '1', 'int');
$db->query($query, $params);
0

Другие решения

Может быть, то, что вы смотрите, это следующая ссылка,

http://dev.mysql.com/doc/refman/5.0/en/insert-on-duplicate.html

эта команда автоматически выполняет вставку и обновление одновременно с определениями, которые вы определяете.

0

По вопросам рекламы [email protected]