Это одна производная таблица:
mysql> select blog_post.id,blog_post.title from blog_post where user_id=2;
+----+--------------------------------------------------------------+
| id | title |
+----+--------------------------------------------------------------+
| 4 | This week at LWN: LCA: Addressing the failure of open source |
| 16 | title week |
+----+--------------------------------------------------------------+
2 rows in set (0.00 sec)
Это еще одна производная таблица:
mysql> select object_pk,count(*) as cnt from django_comments group by object_pk;
+-----------+-----+
| object_pk | cnt |
+-----------+-----+
| 1 | 1 |
| 2 | 1 |
| 3 | 6 |
| 4 | 13 |
+-----------+-----+
4 rows in set (0.00 sec)
Сначала мне нужно сделать эти две производные таблицы в стиле djanto, а затем выполнить внутреннее соединение с этими таблицами.
Это ожидаемый конечный результат:
mysql> select blog_post.user_id,blog_post.id,blog_post.title,foo.cnt from blog_post inner join(select object_pk,count(*) as cnt from django_comments group by object_pk) as foo on blog_post.id=foo.object_pk where blog_post.user_id=2;
+---------+----+--------------------------------------------------------------+-----+
| user_id | id | title | cnt |
+---------+----+--------------------------------------------------------------+-----+
| 2 | 4 | This week at LWN: LCA: Addressing the failure of open source | 13 |
+---------+----+--------------------------------------------------------------+-----+
1 row in set (0.00 sec)
Может кто-нибудь сказать мне, как я могу сделать это, используя Django Orm?
Мне удалось получить вторую производную таблицу следующим образом:
second = Comment.objects.values('object_pk').annotate(cnt=Count('id'))
Таблицы MySQL:
mysql> describe blog_post;
+----------+--------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+----------+--------------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| user_id | int(11) | NO | MUL | NULL | |
| title | varchar(100) | NO | | NULL | |
| content | longtext | NO | | NULL | |
| created | date | NO | | NULL | |
| modified | date | NO | | NULL | |
+----------+--------------+------+-----+---------+----------------+
6 rows in set (0.00 sec)
mysql> describe django_comments;
+-----------------+--------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-----------------+--------------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| content_type_id | int(11) | NO | MUL | NULL | |
| object_pk | longtext | NO | | NULL | |
| site_id | int(11) | NO | MUL | NULL | |
| user_id | int(11) | YES | MUL | NULL | |
| user_name | varchar(50) | NO | | NULL | |
| user_email | varchar(75) | NO | | NULL | |
| user_url | varchar(200) | NO | | NULL | |
| comment | longtext | NO | | NULL | |
| submit_date | datetime | NO | | NULL | |
| ip_address | char(15) | YES | | NULL | |
| is_public | tinyint(1) | NO | | NULL | |
| is_removed | tinyint(1) | NO | | NULL | |
+-----------------+--------------+------+-----+---------+----------------+
13 rows in set (0.00 sec)