SQL ステートメントを要求して待ちます。解決

WBOY
リリース: 2016-06-13 13:30:02
オリジナル
823 人が閲覧しました

SQL ステートメントを要求して待ちます。
4 つのテーブル、

box はボックス、
note はメッセージ、
box_user はどのユーザーがどのボックスでチャットしているかを示します。
box_note は、どのメッセージがどのボックスにあるかです (メッセージは複数のボックスで共有できます)。

ボックスは WeChat のチャット ボックスと同じで、メッセージはその中のメッセージです。

SQL コード
<!--

Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/

-->
mysql> describe box;      
+---------------------------+------------+------+-----+---------+----------------+
| Field                     | Type       | Null | Key | Default | Extra          |
+---------------------------+------------+------+-----+---------+----------------+
| box_id                    | bigint(20) | NO   | PRI | NULL    | auto_increment |
| type                      | tinyint(4) | NO   |     | NULL    |                |
| status_type               | char(1)    | NO   |     | NULL    |                |
| create_time               | datetime   | NO   |     | NULL    |                |
| delete_time_from_one_part | datetime   | NO   |     | NULL    |                |
+---------------------------+------------+------+-----+---------+----------------+
5 rows in set (0.00 sec)

mysql> describe box_user;
+---------+------------+------+-----+---------+-------+
| Field   | Type       | Null | Key | Default | Extra |
+---------+------------+------+-----+---------+-------+
| user_id | bigint(20) | NO   | PRI | 0       |       |
| box_id  | bigint(20) | NO   | PRI | 0       |       |
+---------+------------+------+-----+---------+-------+
2 rows in set (0.01 sec)

mysql> describe note;
+-------------+-------------+------+-----+---------+----------------+
| Field       | Type        | Null | Key | Default | Extra          |
+-------------+-------------+------+-----+---------+----------------+
| note_id     | bigint(20)  | NO   | PRI | NULL    | auto_increment |
| user_id     | bigint(20)  | NO   | MUL | NULL    |                |
| type        | tinyint(4)  | NO   |     | NULL    |                |
| content     | text        | NO   |     | NULL    |                |
| mood        | tinyint(4)  | NO   |     | NULL    |                |
| locate      | varchar(30) | NO   |     | none    |                |
| privacy     | char(1)     | NO   |     | 1       |                |
| create_time | datetime    | NO   | MUL | NULL    |                |
| delay       | int(11)     | NO   |     | 0       |                |
| festival    | char(30)    | NO   |     | NULL    |                |
| delete_time | datetime    | NO   |     | NULL    |                |
+-------------+-------------+------+-----+---------+----------------+
11 rows in set (0.00 sec)

mysql> describe box_note;
+---------+------------+------+-----+---------+-------+
| Field   | Type       | Null | Key | Default | Extra |
+---------+------------+------+-----+---------+-------+
| note_id | bigint(20) | NO   | PRI | 0       |       |
| box_id  | bigint(20) | NO   | PRI | 0       |       |
+---------+------------+------+-----+---------+-------+
2 rows in set (0.00 sec)

ログイン後にコピー


このアイデアは非常に単純で、長い間試みましたが失敗しました。ユーザーとuser_id 時間に基づく各ボックスの最後のメッセージ。

これら 2 つの基本的な SQL ステートメントを準備しました。
SQL コード
<!--

Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/

-->
//获取所有user_id用户的盒子
select box.box_id,type,status_type from box,box_user where box.box_id=box_user.box_id and box_user.user_id=1;
//获取所有内部具有消息的user_id用户的盒子以及最后更新时间
select box_id,max(create_time) as time from note,box_note where note.note_id=box_note.note_id and note.user_id=1 group by box_id;

ログイン後にコピー

その実行結果は次のとおりです。
SQL コード
<!--

Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/

-->mysql> select box.box_id,type,status_type from box,box_user ここで、box.box_id=box_user.box_id および box_user.user_id=1;
+----------+------+---------------+
| ボックス ID |
+----------+------+---------------+
| 1 | 0 |
| 6 | 1 |
| 7 | 3 |
| 8 | 3 |
+----------+------+---------------+
4 行セット (0.00 秒)

mysql> note,box_note からの時間として box_id,max(create_time) を選択します。ここで、note.note_id=box_note.note_id および note.user_id=1 は box_id でグループ化されます。
+--------+----------+
| ボックス ID 時間 |
+--------+----------+
| 1 | 2012-05-21 00:00:00
| 6 | 2012-05-30 00:00:00 |
+--------+----------+
2 行セット (0.00 秒)


 <div class="clear"></div>
ログイン後にコピー
関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート