Mysql
 sql >> डेटाबेस >  >> RDS >> Mysql

MySQL क्वेरी - प्रति समूह हाल की प्रविष्टियाँ

मैं इसे वास्तविक रूप से सरल रखूंगा और श्रेणी तालिका में last_post_id बनाए रखने के लिए एक ट्रिगर का उपयोग करूंगा ताकि आप आसानी से पोस्ट टेबल पर वापस जुड़ सकें - कुछ इस तरह:

साधारण प्रश्न

select
 pc.cat_id,
 pc.name,
 u.username,
 bp.*
from
 post_category pc
inner join blog_post bp on pc.last_post_id = bp.post_id
inner join users u on bp.user_id = u.user_id
order by
 pc.cat_id;

+--------+------+----------+---------+---------+---------------------+
| cat_id | name | username | post_id | user_id | post_date           |
+--------+------+----------+---------+---------+---------------------+
|      1 | cat1 | bar      |       3 |       2 | 2011-02-09 12:45:33 |
|      2 | cat2 | BAR      |       5 |       3 | 2011-02-09 12:45:33 |
|      3 | cat3 | f00      |       4 |       1 | 2011-02-09 12:45:33 |
+--------+------+----------+---------+---------+---------------------+

टेबल्स

drop table if exists post_category;
create table post_category
(
cat_id smallint unsigned not null auto_increment primary key,
name varchar(255) unique not null,
last_post_id int unsigned null,
key (last_post_id)
)
engine=innodb;

drop table if exists users;
create table users
(
user_id int unsigned not null auto_increment primary key,
username varbinary(32) unique not null
)
engine=innodb;

drop table if exists blog_post;
create table blog_post
(
post_id int unsigned not null auto_increment primary key,
user_id int unsigned not null,
post_date datetime not null,
key (post_date, user_id)
)
engine=innodb;

drop table if exists blog_post_category;
create table blog_post_category
(
cat_id smallint unsigned not null,
post_id int unsigned not null,
primary key (cat_id, post_id)
)
engine=innodb;

ट्रिगर

delimiter #

create trigger blog_post_before_ins_trig before insert on blog_post
for each row
begin
  set new.post_date = now();
end#

create trigger blog_post_category_before_ins_trig before insert on blog_post_category
for each row
begin
  update post_category set last_post_id = new.post_id where cat_id = new.cat_id;
end#

delimiter ;

टेस्ट डेटा

insert into post_category (name) values ('cat1'),('cat2'),('cat3'),('cat4');
insert into users (username) values ('f00'),('bar'),('BAR'),('alpha'),('beta');

insert into blog_post (user_id) values (1),(1),(2),(1),(3);
insert into blog_post_category (cat_id, post_id) values
(1,1),(1,3),
(2,1),(2,5),
(3,1),(3,3),(3,4);

आशा है कि यह मदद करता है :)



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. तिथियों की एक श्रृंखला के साथ तालिका को कैसे पॉप्युलेट करें?

  2. ORDER BY क्लॉज में बाध्यकारी पैरामीटर परिणाम का आदेश क्यों नहीं देता है?

  3. Mysql प्रत्येक समूह के लिए अंतिम पंक्ति का चयन करें

  4. ट्रिगर mysql से परिणामसेट वापस करने की अनुमति नहीं है

  5. चेकबॉक्स को पॉप्युलेट करें और फिर चयन को mysql में अपडेट करें