首先我们这有两张表,一个主表,一个从表
主表:TheFilm_Name包含以下关键字段
id =>int(11)唯一自增加;
name => varchar(32)节目名称;
access_token => varchar(32)多个管理员的唯一内部令牌
从表:TheFilm_Data包含以下关键字段
id=>int(11) 唯一自增ID,主要用于记录行数和做主键;
status=>int(4) 节目状态,0=未启用,1=启用中,2=播放完毕
access_token => varchar(32)多个管理员的唯一内部令牌
name_id => int(11) 对应的节目名称ID;
好了言归正传,如果我们要提取TheFilm_Name对应的节目详细数据status=1的,那么我们可以执行语句:
SELECT * FROM `TheFilm_Name` t1 LEFT JOIN `TheFilm_Data` t2
ON(t1.id=t2.name_id AND t1.access_token=t2.access_token) WHERE t2.status=’1′ AND t2.access_token=’admin_token’;
如此一执行,就会把TheFilm_Data内的所有status=1并且对应access_token的数据提取出来了;
但又有那么一个问题:
因为节目就那么几个,详细的可能涉及多个,比如一个节目(西游记),可能有多个数据(比如根据不同的时候写入到了TheFilm_Data),那么就会出现重复的数据;
一个简单的关联查询解决重复的问题:在于一句:GROUP BY t1.id;
SELECT t1.* FROM `TheFilm_Name` t1 LEFT JOIN `TheFilm_Data` t2
ON(t1.id=t2.name_id AND t1.access_token=t2.access_token) WHERE t2.status=’1′ AND t1.access_token=’admin_token’ GROUP BY t1.id; ORDER BY t1.id DESC;
在这特别注意,因为是关联查询,而且两个表内都有ID值,所以加上t1.*表示提取TheFilm_Name的全部
关于作者