php-mysql主从表关联查询获取数据重复的解决方法

通过清心醉

php-mysql主从表关联查询获取数据重复的解决方法

首先我们这有两张表,一个主表,一个从表

主表: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的全部

关于作者

清心醉 administrator

发表评论

如果喜欢作者的文章,您可以打赏给作者:

TRC20(虚拟货币):


ERC20(虚拟货币):


Bitcoin(BTC):