чистый цикл MySQL для обновления нескольких строк - PullRequest
1 голос
/ 13 октября 2011

Я хочу обновить несколько строк на основе запроса SELECT sql.

Я хочу сделать это ВСЕ в оболочке SQL!

Вот мой выбор:

SELECT @myid := id, @mytitle := title
FROM event 
WHERE pid>0 GROUP BY title
ORDER BY start;

Затем я хочу сделать обновление с помощью этого псевдокода:

foreach($mytitle as $t)
BEGIN
    UPDATE event
    SET pid=$myid
    WHERE title=$t;
END

Но я не знаю, как создать цикл в SQL.

Может быть, есть способ сделать это одним запросом sql?

Я НЕ ХОЧУ НИКАКОЙ PHP !!! ТОЛЬКО КОД ОБОЛОЧКИ SQL !!!

Ответы [ 2 ]

4 голосов
/ 13 октября 2011

I want to update every rows with a pid with the id of the first occurence of an event. Start is a timestamp

Я думаю, что это должно делать то, что вы хотите, но если это не так (я не уверен насчет присоединения подзапроса в запросе UPDATE), тогда вы можете использовать временную таблицу вместо.

UPDATE
    event
    JOIN (
        SELECT
            MIN(pid) AS minPID,
            title
        FROM
            event
        WHERE
            pid > 0
        GROUP BY
            title
    ) AS findPIDsQuery ON event.title = findPIDsQuery.title
SET
    event.pid = findPIDsQuery.minPID
0 голосов
/ 13 октября 2011

Чистый SQL на самом деле не имеет «петель», per se : это описательный язык на основе множеств.Я полагаю, что следующее обновление будет делать то, что вы хотите (хотя ваши заявления о проблемах оставляют желать лучшего - мы ничего не знаем о базовой схеме).

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