Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум MySQL

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум (новые сообщения вниз) Структурный форум

тема: база данных для игры

Сообщения:  [1-10]   [11-19] 

 
 автор: Valick   (05.12.2008 в 09:45)   письмо автору
 
   для: Valick   (05.12.2008 в 09:24)
 

Вот так нормально?
UPDATE  characters AS ch 
    SET ch.exp = ch.exp + $up, ch.level = ( SELECT MAX(level.level) FROM  level WHERE ch.exp >= level.exp )
    WHERE  ch.id_chars=$id

  Ответить  
 
 автор: Valick   (05.12.2008 в 09:24)   письмо автору
 
   для: Trianon   (05.12.2008 в 08:31)
 

Спасибо. Так вообще красота.
Я так понимаю WHERE ch.id_chars=$id относится и к UPDATE и к SELECT несмотря на то что последний в скобках?

Теперь остаётся объединить два запроса UPDATE (возможно?) и получится аналог триггера.

  Ответить  
 
 автор: Trianon   (05.12.2008 в 08:31)   письмо автору
 
   для: Valick   (05.12.2008 в 01:55)
 

UPDATE  characters AS ch    
    SET ch.level = ( SELECT MAX(level.level) FROM  level WHERE ch.exp >= level.exp ) 
  WHERE  ch.id_chars=$id

  Ответить  
 
 автор: Valick   (05.12.2008 в 01:55)   письмо автору
 
   для: Trianon   (05.12.2008 в 01:02)
 

Вот так у меня получилось:
$query="UPDATE  characters AS ch    
    JOIN    
    ( 
        SELECT MAX(level.level) AS level 
        FROM characters JOIN level ON characters.exp >= level.exp AND characters.id_chars=$id 
    ) AS s1 ON ch.id_chars=$id
    SET ch.level = s1.level";

  Ответить  
 
 автор: Valick   (05.12.2008 в 01:13)   письмо автору
 
   для: Trianon   (05.12.2008 в 01:02)
 

ch.id_chars = 1 это я попробовал сразу
просто хочу всё лишнее из запроса убрать

P.S. жена ругается... грит иди спать...

  Ответить  
 
 автор: Trianon   (05.12.2008 в 01:02)   письмо автору
 
   для: Valick   (05.12.2008 в 01:00)
 

ну я ж подсказал.

  Ответить  
 
 автор: Valick   (05.12.2008 в 01:00)   письмо автору
 
   для: Trianon   (05.12.2008 в 00:57)
 

Уже пытаюсь это сделать) если через неделю несмогу... попрошу помочь))

  Ответить  
 
 автор: Trianon   (05.12.2008 в 00:57)   письмо автору
 
   для: Valick   (05.12.2008 в 00:09)
 

тогда можно упростить как вложенный запрос, так и сам апдейт.
Впрочем, достаточно GROUP BY idc заменить на WHERE c1.id_chars = $char_id
можно еще добавить в хвост WHERE ch.id_chars = $char_id , если всё еще медлено работает.

  Ответить  
 
 автор: Valick   (05.12.2008 в 00:09)   письмо автору
 
   для: Trianon   (04.12.2008 в 23:59)
 

Вряд ли я когда-нить с Oracle увижусь))
ch и c1 для таблицы characters и l1 и l2 для таблицы level необходимы?
Т.е. без алиасов переписать этот запрос при всём желании неполучится, будет ошибка?

Ещё одна деталь. Этот запрос "лопатит" всю таблицу, я думаю это будет лишним. Его надо будет вызывать именно для того персонажа который получил очки опыта. Всем остальным (громадная часть которых оффлайн) смысла нет переписывать одно и тоже.

  Ответить  
 
 автор: Trianon   (04.12.2008 в 23:59)   письмо автору
 
   для: Valick   (04.12.2008 в 23:57)
 

AS можно опускать. Этот предлог только для человека. Синтаксическим анализатором он не требуется.
Более того, насколько я помню, Oracle на него ругается и не признает.

  Ответить  

Сообщения:  [1-10]   [11-19] 

Форум разработан IT-студией SoftTime
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования