如何在同一个表上进行多个查询,选择不同的列?将同一个表上的多个MySQL查询合并为一个
如果它有帮助......所有查询在SQL语句的选择部分都有一个共同的列。他们都选择了ID
,然后是特定的东西。
因此,每个查询需要ID
和以下任一项:post_name
,post_title
或post_excerpt
。
此外,如果它有助于简化事情。我正在尝试在这些列中搜索广泛匹配项和精确匹配项。
所以在我的示例中,我将查找:“floor finish”,“floor”或“finish”在以下列中:post_name
,post_title
和post_excerpt
。全部在同一张表内。
我试图用UNION
来实现这个。
这里是我的查询:
Array
(
[broad] => Array
(
[floor] => Array
(
[slugs] => SELECT `ID`, `post_name` FROM tps_3_posts WHERE `post_status` = 'publish' AND `post_name` LIKE '%floor%'
[titles] => SELECT `ID`, `post_title` FROM tps_3_posts WHERE `post_status` = 'publish' AND `post_title` LIKE '%floor%'
[excerpts] => SELECT `ID`, `post_excerpt` FROM tps_3_posts WHERE `post_status` = 'publish' AND `post_excerpt` LIKE '%floor%'
)
[finish] => Array
(
[slugs] => SELECT `ID`, `post_name` FROM tps_3_posts WHERE `post_status` = 'publish' AND `post_name` LIKE '%finish%'
[titles] => SELECT `ID`, `post_title` FROM tps_3_posts WHERE `post_status` = 'publish' AND `post_title` LIKE '%finish%'
[excerpts] => SELECT `ID`, `post_excerpt` FROM tps_3_posts WHERE `post_status` = 'publish' AND `post_excerpt` LIKE '%finish%'
)
)
[exact] => Array
(
[slugs] => SELECT `ID`, `post_name` FROM tps_3_posts WHERE `post_status` = 'publish' AND `post_name` LIKE '%floor-finish%'
[titles] => SELECT `ID`, `post_title` FROM tps_3_posts WHERE `post_status` = 'publish' AND `post_title` LIKE '%floor finish%'
[excerpts] => SELECT `ID`, `post_excerpt` FROM tps_3_posts WHERE `post_status` = 'publish' AND `post_excerpt` LIKE '%floor finish%'
)
[combined] => (SELECT `ID`, `post_name` FROM tps_3_posts WHERE `post_status` = 'publish' AND `post_name` LIKE '%floor-finish%') UNION (SELECT `ID`, `post_name` FROM tps_3_posts WHERE `post_status` = 'publish' AND `post_name` LIKE '%floor%') UNION (SELECT `ID`, `post_name` FROM tps_3_posts WHERE `post_status` = 'publish' AND `post_name` LIKE '%finish%') UNION (SELECT `ID`, `post_title` FROM tps_3_posts WHERE `post_status` = 'publish' AND `post_title` LIKE '%floor finish%') UNION (SELECT `ID`, `post_title` FROM tps_3_posts WHERE `post_status` = 'publish' AND `post_title` LIKE '%floor%') UNION (SELECT `ID`, `post_title` FROM tps_3_posts WHERE `post_status` = 'publish' AND `post_title` LIKE '%finish%') UNION (SELECT `ID`, `post_excerpt` FROM tps_3_posts WHERE `post_status` = 'publish' AND `post_excerpt` LIKE '%floor finish%') UNION (SELECT `ID`, `post_excerpt` FROM tps_3_posts WHERE `post_status` = 'publish' AND `post_excerpt` LIKE '%floor%') UNION (SELECT `ID`, `post_excerpt` FROM tps_3_posts WHERE `post_status` = 'publish' AND `post_excerpt` LIKE '%finish%')
)
然而,上述结果是有趣的。我似乎得到所有正确的结果,除了每个结果值(应该是列的名称)的关键字始终保持不变。即使分配给它的值可能是post_title
或post_excerpt
,它始终为post_name
。
所以每个结果都有一个ID
和post_name
。基本上他们的钥匙是错的,但是这些数值似乎是准确的。
我也尝试过这样的事情:
Array
(
[broad] => Array
(
[floor] => SELECT `ID`, `post_name`, `post_title`, `post_excerpt` FROM tps_3_posts WHERE `post_status` = 'publish' AND (`post_name` LIKE '%floor%' OR `post_title` LIKE '%floor%' OR `post_excerpt` LIKE '%floor')
[finish] => SELECT `ID`, `post_name`, `post_title`, `post_excerpt` FROM tps_3_posts WHERE `post_status` = 'publish' AND (`post_name` LIKE '%finish%' OR `post_title` LIKE '%finish%' OR `post_excerpt` LIKE '%finish%')
)
[exact] => SELECT `ID`, `post_name`, `post_title`, `post_excerpt` FROM tps_3_posts WHERE `post_status` = 'publish' AND (`post_name` LIKE '%floor-finish%' OR `post_title` LIKE '%floor finish%' OR `post_excerpt` LIKE '%floor finish%')
[combined] => SELECT `ID`, `post_name`, `post_title`, `post_excerpt` FROM tps_3_posts WHERE `post_status` = 'publish' AND (`post_name` LIKE '%floor-finish%' OR `post_title` LIKE '%floor finish%' OR `post_excerpt` LIKE '%floor finish%') UNION (SELECT `ID`, `post_name`, `post_title`, `post_excerpt` FROM tps_3_posts WHERE `post_status` = 'publish' AND (`post_name` LIKE '%floor%' OR `post_title` LIKE '%floor%' OR `post_excerpt` LIKE '%floor%')) UNION (SELECT `ID`, `post_name`, `post_title`, `post_excerpt` FROM tps_3_posts WHERE `post_status` = 'publish' AND (`post_name` LIKE '%finish%' OR `post_title` LIKE '%finish%' OR `post_excerpt` LIKE '%finish%'))
)
)
这是沿着什么,我试图完成的线条更。我希望每个结果都有ID
,post_excerpt
,post_slug
和post_title
。如果没有匹配,则显示它们的键值为空,或者完全不显示该键。
第二次尝试的问题是,它只需要三个所需列中的一个匹配。因此,如果它匹配post_excerpt
而没有其他地方,它仍然会从post_title
和post_name
中提取值。从而导致结果不准确。
我已经阅读了几个似乎是类似的问题,但大多数都没有真正明确的答案......或者...问题/答案更适合于SEPARATE表上的多个查询。
关于在同一个表上组合多个MySQL查询的任何指导或建议?
BY THE WAY ...我在我的例子中使用“组合”作为我的最终查询发送到数据库。
所以再一次......如果列中没有匹配,则显示它们为空或完全忽略结果中的键。
这正是我为什么不经常使用这个网站的原因。每个人都喜欢傲慢和无用,而不是建设性和有益的。 – 2015-03-31 22:03:52
你为什么这么说? – 2015-03-31 22:49:22
我发表的评论是针对做出粗暴评论的人的回应。要么他自己删除它,要么是主持人。 – 2015-04-01 16:25:00