Помогите написать запрос
Дана таблица character_subclasses:
http://www.pictureshack.ru/images/392855.PNG Итак смотрим на последнюю колонку "class_index" - здесь идут саб-класы по порядку у одного чара. Что мне нужно сделать? Необходимо все единцы("1") в колонки class_index, у повторяющихся charId установить на "+1...". Как сделать такой запрос? Весь день голову уже ломаю) |
Re: Помогите написать запрос
Думаю легче было за пол дня переписать в ручную.
|
Re: Помогите написать запрос
тут одним запросом не обойдется :D
в раздел рынок быстрее и проще или http://rutracker.org/forum/viewtopic.php?t=3709220 часть 2 - основы работы с базой 4 и 6 пункт там как раз в примере циклы |
Re: Помогите написать запрос
L2CCCP, хех, а если 5к+ записей? Как ты себе это представляеш(сверка)? :)
Place, Ну я так примерно и предпологал, что без цикла ни как(( Просто думал. мало ли мож чето незнаю) |
Re: Помогите написать запрос
чет типа того
$all = mysql_num_rows(mysql_query("SELECT class_idexp FROM character_subclasses WHERE charid=1111")); $i = 1; while ($i <= $all) { mysql_query('UPDATE character_subclasses SET class_index = $i WHERE charid=111 AND class_index=1'); } |
Re: Помогите написать запрос
Цитата:
|
Re: Помогите написать запрос
на самом деле можно сделать и средствами SQL.
например многосоставный запрос или переменные в sql. Добавлено через 55 секунд Цитата:
|
Re: Помогите написать запрос
Цитата:
Цитата:
|
Re: Помогите написать запрос
нет возможности проверить, возможно, так будет работать тоже:
UPDATE character_subclasses SET class_index=(class_index+1) WHERE charid=111 AND class_index=1 AND class_idexp=(SELECT class_idexp FROM character_subclasses WHERE charid=1111); Добавлено через 2 минуты точнее так) UPDATE character_subclasses SET class_index=(SELECT MAX(class_index) FROM character_subclasses WHERE charid=1111)+1 WHERE charid=111 AND class_index=1 AND class_idexp=(SELECT class_idexp FROM character_subclasses WHERE charid=1111); |
Re: Помогите написать запрос
У меня наплыв идей проихошел)) ща делаю)
|
Re: Помогите написать запрос
результатом заделись - интересно, что выйдет в итоге.
|
Re: Помогите написать запрос
Цитата:
Добавлено через 30 секунд Цитата:
|
Re: Помогите написать запрос
По поводу You can't specify target table все верно ибо запрос составлен неправильно. Нельзя в одном запросе читать и изменять значения в одной таблице. Коллизия происходит и в итоге получаете эту ошибку.
|
Re: Помогите написать запрос
Простите, а написать не ЗАПРОС а SQL скрипт с использованием курсоров вам что-то мешает?
- создаете временную табличку для ИД - делаете селект в курсор - итерируете курсор, если находите запись подходящую под условия изменения, то заносите ее во временную таблицу - делаете апдейт по основной таблице и временной |
Re: Помогите написать запрос
Цитата:
Я вчера ночью так и сделал все, но проблема в сортировки. Все ставиться ни там где надо, мускул произвольно вывод делает,а не по порядку записей. Но сегодня с сортировкой сделаю, добавлю столбец по ИД, посмарю что получиться. Добавлено через 8 минут Если оставить лишь 3 записи с одинаковыми обж_ид, а ост удалить, то все верно расставляеться. Вобщем буду сортировку ставить) |
Re: Помогите написать запрос
курсор - это
DECLARE cur1 CURSOR FOR SELECT .... FROM zz; |
Re: Помогите написать запрос
Цитата:
Добавлено через 1 час 17 минут Примерно понял для чего нужен ДЕКЛАР, но до конца не могу вьехать как сделать то, что мне надо. Ни где нет нормального объяснения как правельно составить этот SQL скрипт (синтаксис). :( Если не сложно н аживом примере покажи пожалуйста. Добавлено через 4 часа 14 минут Всем спасибо кто помогал, короче сделал так: PHP код:
|
Текущее время: 02:19. Часовой пояс GMT +3. |
Powered by vBulletin® Version 3.8.6
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot