Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/86.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_Sql_Database_Union - Fatal编程技术网

MySQL创建高级查询 总结

MySQL创建高级查询 总结,mysql,sql,database,union,Mysql,Sql,Database,Union,所以我有3张表,下面有截图。默认情况下,每个用户在注册时都会获得10张幻灯片,因此信息位于“幻灯片”表中。模板id只是我拥有的另一个表,它与自定义幻灯片表相同,只是有10个预先制作的幻灯片是默认幻灯片,因此如果我想更新默认幻灯片的页面名称,我只需在该模板表中执行一次 如果幻灯片是自定义幻灯片,那么模板id将为空,就像您看到的幻灯片11一样,幻灯片11将被放入自定义幻灯片表中 SELECT * FROM user_slides us INNER JOIN slides s ON us.sl

所以我有3张表,下面有截图。默认情况下,每个用户在注册时都会获得10张幻灯片,因此信息位于“幻灯片”表中。模板id只是我拥有的另一个表,它与
自定义幻灯片
表相同,只是有10个预先制作的幻灯片是默认幻灯片,因此如果我想更新默认幻灯片的页面名称,我只需在该模板表中执行一次

如果幻灯片是自定义幻灯片,那么模板id将为空,就像您看到的幻灯片11一样,幻灯片11将被放入自定义幻灯片表中

SELECT * 
FROM user_slides us
INNER JOIN slides s 
  ON us.slide_id = s.slide_id
LEFT JOIN templates t
  ON s.template_id=t.template_id
LEFT JOIN custom_slides cs
  ON s.slide_id = cs.slide_id
WHERE user_id = 1

我需要什么 因此,我需要帮助编写查询以获取一些信息。我想获取某个用户的幻灯片id、排序顺序和页面名称

到目前为止,我有以下几点:

SELECT slide_id, sort_order FROM `user_slides` WHERE user_id = 1
现在我需要获取页面名称,但我需要运行一个单独的查询

  • 检查幻灯片表上的幻灯片id,查看模板id是否为空或是否有值
  • 如果它有一个值,那么它是一个默认幻灯片,因此如果模板id为3,那么我需要运行一个查询,从templates表(其中模板id=3)中获取页面名称
  • 如果template_id为NULL,那么我需要在custom_slides表中运行查询以查找页面名称,其中slide_id=任何幻灯片id
我还没有太多的经验运行多个查询和联合以及所有这些,所以如果有人可以帮助我开始创建这个查询,我将非常感谢


表格预览 用户\u幻灯片

幻灯片

自定义幻灯片


您可以在templates表(您没有给出名称,所以我在示例中称之为“templates”)和custom_slides表上尝试使用两个左联接

SELECT * 
FROM user_slides us
INNER JOIN slides s 
  ON us.slide_id = s.slide_id
LEFT JOIN templates t
  ON s.template_id=t.template_id
LEFT JOIN custom_slides cs
  ON s.slide_id = cs.slide_id
WHERE user_id = 1
即使
模板中没有相应的行(即
幻灯片中的
模板id
为空)或自定义幻灯片中,也应返回
用户幻灯片
幻灯片
中的所有行(即,如果
幻灯片id
不是自定义幻灯片,因此在
自定义幻灯片
表中不存在)


但是,您应该在应用程序层(假设有一个应用程序运行查询并使用结果)中有一些逻辑来检查模板id是否为空,如果为空,则使用自定义幻灯片。

您可以尝试在templates表上使用两个左联接(您没有给出名称,所以我在示例中称之为“templates”)在定制的幻灯片桌上

SELECT * 
FROM user_slides us
INNER JOIN slides s 
  ON us.slide_id = s.slide_id
LEFT JOIN templates t
  ON s.template_id=t.template_id
LEFT JOIN custom_slides cs
  ON s.slide_id = cs.slide_id
WHERE user_id = 1
即使
模板中没有相应的行(即
幻灯片中的
模板id
为空)或自定义幻灯片中,也应返回
用户幻灯片
幻灯片
中的所有行(即,如果
幻灯片id
不是自定义幻灯片,因此在
自定义幻灯片
表中不存在)


但是,您应该在应用程序层(假设有一个应用程序运行查询并使用结果)中有一些逻辑来检查模板id是否为空,如果为空,则使用自定义幻灯片。

我认为此查询应该获取您想要的数据:

SELECT slide_id, sort_order, COALESCE(`templates`.page_name, `custom_slides`.page_name)  
FROM `user_slides` 
JOIN `slides` ON `slides`.slide_id = `user_slides` .slide_id
LEFT OUTER JOIN `templates` ON `templates`.template_id = `slides`.template_id
LEFT OUTER JOIN `custom_slides` ON `slides`.template_id IS NULL AND `custom_slides`.slide_id = `slides`.slide_id
WHERE `user_slides`.user_id = 1
澄清: 这基本上就是您发布的带有一些联接的select查询。 首先,
幻灯片
表与幻灯片id相匹配。
然后联接
模板
表,外部联接确保仍然包括模板id为NULL的行。最后联接
自定义幻灯片
表,但仅当模板id为NULL时。然后使用
合并
自定义幻灯片
模板
中选择页面名称请相信此查询应获取所需的数据:

SELECT slide_id, sort_order, COALESCE(`templates`.page_name, `custom_slides`.page_name)  
FROM `user_slides` 
JOIN `slides` ON `slides`.slide_id = `user_slides` .slide_id
LEFT OUTER JOIN `templates` ON `templates`.template_id = `slides`.template_id
LEFT OUTER JOIN `custom_slides` ON `slides`.template_id IS NULL AND `custom_slides`.slide_id = `slides`.slide_id
WHERE `user_slides`.user_id = 1
澄清: 这基本上就是您发布的带有一些联接的select查询。 首先,
幻灯片
表与幻灯片id相匹配。
然后联接
模板
表,外部联接确保仍然包括模板id为空的行。最后联接
自定义幻灯片
表,但仅当模板id为空时。然后使用
合并
自定义幻灯片
模板
中选择页面名称使用COALESCE是一种很好的触感!使用COALESCE是一种很好的触感!