- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
<?php
public function run()
{
$db = Registry::get('Db');
$db->transaction(Db_Database::START);
$success = $db->query()->update()
->table('forum_topics')
->set('PostsCount = PostsCount - 1')
->set('LastPostID = ('
. $db->query()
->select()->fields('ID')
->table('forum_posts')->order('ID', 1) // DESC
->where('TopicID = %d', $this->post->topic->id)
->limit(1)->compile()->getQuery()
. ')')
->set('FirstPostID = ('
. $db->query()
->select()->fields('ID')
->table('forum_posts')->order('ID')
->where('TopicID = %d', $this->post->topic->id)
->limit(1)->compile()->getQuery()
. ')')
->where('ID = %d', $this->post->topic->id)
->compile()->run()->success()
&& $db->query()->update()
->table('forum_cats')
->set('PostsCount = PostsCount - 1')
->set('LastTopicID = ('
. $db->query()
->select()->fields('ID')
->table('forum_topics')->order('LastPostID', 1) // DESC
->where('CatID = %d', $this->post->topic->category->id)
->limit(1)->compile()->getQuery()
. ')')
->where('ID = %d', $this->post->topic->category->id)
->compile()->run()->success()
&& $db->query()->update()
->table('forum_posts')
->set('Deleted = 1')
->where('ID = %d', $this->post->id)
->compile()->run()->success();
$db->transaction($success ? Db_Database::COMMIT : Db_Database::ROLLBACK);
return $success;
}
Вот такая вот жесть бывает. Изменение счетчиков на форуме (денормализация) с использованием альфа-версии кверибилдера. по-моему — устрашающе)
bildja 13.10.2009 23:04 # 0
shitcoder 14.10.2009 10:35 # 0
а вообще такое кол-во кода ради апдейта счетчика это пиздец)
Shock 14.10.2009 17:27 # 0
хотя, я сомневаюсь, что на, скажем, чистом скл можно сделать меньше кода... )))
cheef 14.10.2009 16:29 # 0
guest 18.10.2009 17:41 # 0
foxweb 19.10.2009 15:42 # 0
Shock 19.10.2009 17:48 # 0