Обновить с увеличенным значением на основе соответствующей строки - PullRequest
0 голосов
/ 17 октября 2010

Вот проблема для PHP-жонглера в вас. Я хочу использовать PHP-функции plain-ol ' mysql _ *.

У меня есть следующая таблица MySQL:

+-----+-----------------+
|  id | thread          |
+-----+-----------------+
|  14 | 01/             |
|  14 | 02/             |
|  14 | 03/             |
|  15 | 01/             |
|  22 | 01/             |
|  24 | XXX             |
|  24 | XXX             |
|  24 | XXX             |
|  24 | XXX             |
|  32 | XXX             |
|  32 | XXX             |
+-----+-----------------+

Значения "XXX" - это моё создание. Я хочу изменить (ОБНОВИТЬ) эту таблицу на эту:

+-----+-----------------+
|  id | thread          |
+-----+-----------------+
|  14 | 01/     <-      |
|  14 | 02/             |
|  14 | 03/             |
|  15 | 01/     <-      |
|  22 | 01/     <-      |
|  24 | 01/     <-      |
|  24 | 02/             |
|  24 | 03/             |
|  24 | 04/             |
|  32 | 01/     <-      |
|  32 | 02/             |
+-----+-----------------+

При каждом новом значении поля "id" (где "<-"; мое создание также), значение поля "thread" должно сбрасываться до "01 /" продолжайте увеличивать, пока не будет найдено новое значение "id". </p>

Я пытался сделать запрос с COUNT (id), чтобы как-то увеличить. Я пытался хранить в массивах. Я думал о mysql_data_seek () также. Увы, я не справляюсь с этим.


Я правильно понял формат "потока":

$thread = $i < 10 ? "0$i" : $i;

Итак, если оно больше 10, оно не получает начальный ноль. Но это только самое интересное.


Любая помощь будет оценена.

Спасибо

Ответы [ 2 ]

1 голос
/ 17 октября 2010
SET @oldid = 0;
SET @counter = 0;
UPDATE tablename
SET thread = CONCAT(
  LPAD(
     CAST(IF(id = @oldid,
       @counter := @counter + 1,      -- same id, increment
       @counter := (@oldid := id)/id) -- other id, set to 1 
       AS UNSIGNED),
     2,'0'),                          -- pad with '0'
  '/')                                -- append '/'
WHERE thread = 'XXX'                  -- or enumerate the whole thing if need be
ORDER BY id, thread;

Который может быть просто передан на "plain ol 'mysql_query" (3 подряд: подача запросов SET & UPDATE отдельно, в качестве альтернативы забыть о SET ничегоЯ просто ненавижу неинициализированные переменные;)

0 голосов
/ 17 октября 2010

Установите PRIMARY KEY для кортежа (id, thread) и установите thread (но не id!) Как AUTO_INCREMENT, затем выполните запрос

INSERT INTO mytable (id) VALUES (24),(24),(32),(24),(32),(24)

и thread атрибут должен бытьустановить автоинкрементно.Если вы настаиваете на форме «0n /», я предлагаю создать атрибут thread_string и создать триггер BEFORE UPDATE в соответствии с атрибутом NEW.thread.Это работает?

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