2013-04-26 2 views
0
$query = "SELECT loved FROM users WHERE uid=:quitter"; 
$query = "UPDATE users SET status='0', loved=NULL, beloved_count='0' WHERE uid=:deceased"; 
$query = "UPDATE users SET beloved_count=beloved_count-1 WHERE uid=:lover"; 

Потому что это может быть не ясно из моего кода, вот что происходит:
Пользователь 123 выхода. мне нужно
1) Узнайте, кто 123 «любил»
2) Обновление 123 в строке (набор статус = «0» и т.д.)
3) Обновление «любимого» строка пользователя и уменьшить «beloved_count» по 1Объедините SELECT и два ОБНОВЛЕНИЯ?

Все это происходит в пределах одного стола. Может ли это случиться с одним запросом? В идеале, я хотел бы сделать это с одним запросом, но даже два были бы лучше, чем там, где я нахожусь с тремя отдельными запросами.

Я просмотрел JOIN, но мне это просто не ясно, так как я никогда не использовал их раньше. Я видел примеры комбинаций запросов, но ничего, что отражает это. Я использую PHP 5.4 и PDO.


Что-то вроде:

$query = "UPDATE users SET status='0', loved=NULL, beloved_count='0' WHERE uid=:deceased; 
    UPDATE users SET beloved_count=beloved_count-1 WHERE uid=:lover;"; 
+3

Два обновления меняют разные данные на основе различных условий. вам было бы лучше делать два запроса, а не пытаться придумать огромное запутанное чудовище. –

+0

У меня создалось впечатление, что с некоторыми базами данных и расширениями возможно получить значение, возвращаемое из обновления. Это, наверное, неприменимо здесь, да? – David

+0

Согласитесь с Marc B - как академическое упражнение, его * возможно *, чтобы объединить обновления и даже выполнить обновления как побочные эффекты выбора, - но на практике это не очень хорошо. (и нет, его невозможно в SQL для UPDATE возвращать данные). – symcbean

ответ

0

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

UPDATE 
    users AS u1, 
    users AS u2 
SET 
    u1.status='0', 
    u1.loved=NULL, 
    u1.beloved_count='0', 
    u2.beloved_count=u2.beloved_count-1 
WHERE 
    u1.uid=:quitter 
    AND u1.loved=u2.uid; 
Смежные вопросы