如何在同一個表上進行多個查詢,選擇不同的列?將同一個表上的多個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