Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/59.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql-试图在一个联盟中只获得一个结果_Mysql_Union_Multilingual - Fatal编程技术网

Mysql-试图在一个联盟中只获得一个结果

Mysql-试图在一个联盟中只获得一个结果,mysql,union,multilingual,Mysql,Union,Multilingual,我试图做的是查询数据库,根据所选的网站语言获取我的网站的所有频道。因此,数据库中有一个表,用于所有通道。第二个表根据内容分配给的语言保存所有频道内容。假设我想要一个频道有英文和西班牙文版本,那么频道表中只有一条记录,然后在channel_local表中有两个条目,都有来自主频道表的相同频道id,但有一个条目有英文版本的频道,第二个条目有西班牙文版本的频道。我如何查询主频道表,并根据为站点选择的当前语言,从channel_local表中获取该频道的语言版本,但如果未找到结果,则在一次查询中默认为站

我试图做的是查询数据库,根据所选的网站语言获取我的网站的所有频道。因此,数据库中有一个表,用于所有通道。第二个表根据内容分配给的语言保存所有频道内容。假设我想要一个频道有英文和西班牙文版本,那么频道表中只有一条记录,然后在channel_local表中有两个条目,都有来自主频道表的相同频道id,但有一个条目有英文版本的频道,第二个条目有西班牙文版本的频道。我如何查询主频道表,并根据为站点选择的当前语言,从channel_local表中获取该频道的语言版本,但如果未找到结果,则在一次查询中默认为站点的默认语言?我原以为一个工会会管用,但它有英文版和西班牙文版。以下是查询:

SELECT * FROM (SELECT
channel_local.channelid,
channel_local.channelname,
channel.channelorder
FROM channel
INNER JOIN channel_local ON
channel.id = channel_local.channelid
WHERE channel.active = 1
AND channel_local.languageid = {currentlanguageid}
UNION
SELECT 
channel_local.channelid,
channel_local.channelname,
channel.channelorder
FROM channel
INNER JOIN channel_local ON
channel.id = channel_local.channelid
WHERE channel.active = 1
AND channel_local.languageid = {defaultlanguageid})
AS channels
结果是:

第一频道英文版 第一频道西班牙文版 第二频道英文版 我想要的结果是

第一频道英文版 第二频道英文版 如果当前语言为西班牙语,则我希望得到以下结果:

第一频道西班牙文版 第2频道英文版,因为没有西班牙语版本 第二频道 那怎么办

SELECT * FROM channel_local
WHERE channelid IN (
    SELECT channelid FROM channel
    WHERE languageid={default language selector}  AND active=1
)
只需从通道表中该通道所在的通道_local中选择所有,并且该通道处于活动状态

或者

如果活动字段位于channel_local表中,则可以将

SELECT * FROM channel_local
WHERE  active=1 AND channelid IN (
    SELECT channelid FROM channel
    WHERE languageid={default language selector}
)

这种关联子查询可能会更快,而不是执行多个连接(很快就会变得非常混乱)

对于完整的联合,您可以执行以下操作:
选择频道\本地,频道。从channel_local,channel where channel.channelid=channel_local.channelid和channel_local.channelid中选择channelid from channel where languageid='eng'和active=1

按英语优先顺序排列,我想两个选择上的限制值都应该为1。在SQL Server中,可以使用GROUP BY进行此操作,但我不知道如何在MySQL中对top N进行分组。我尝试了GROUP BY,问题是首先出现了对defaultlanguageid的查询。不知道这是否适用于我正在寻找的内容。基本上,我想选择分配给站点上选择的当前语言的条目。因此,如果西班牙语为西班牙语选择channel_local中的条目。但是,如果没有西班牙语版本,它将默认为英语。
SELECT * FROM channel_local
WHERE  active=1 AND channelid IN (
    SELECT channelid FROM channel
    WHERE languageid={default language selector}
)