【问题标题】:SELECT from two exclusive tables to combine the result set从两个独占表中选择以组合结果集
【发布时间】:2012-08-08 08:10:51
【问题描述】:

我的问题是我目前正在处理的网站有两个产品表,并且有一个搜索功能只能搜索其中一个表。我想扩展网站的搜索页面以涵盖这两个表格。

实际上,我需要两个查询,它们加入他们的结果集,这样我就可以使用 PHP 计算与用户搜索查询的相关性。

mysql_query("SELECT * FROM product WHERE title LIKE '%$keyword%' OR content LIKE '%$keyword%'")

title 也是product_spray 表中的一个字段,content 也是如此。如何修改上述查询以包含来自product 表和product_spray 表的结果?

我不确定这是不是我需要的 JOIN,因为这两个表之间没有链接,它们是互斥的。不过,我对 MySQL 不是很有经验,所以如果有什么我遗漏的地方,请告诉我。

我试过了:

mysql_query("SELECT * FROM product, product_spray WHERE product.title LIKE '%$keyword%' OR product.content LIKE '%$keyword%' OR product_spray.title LIKE '%$keyword%' OR product_spray.content LIKE '%$keyword%'")

结果集没有正确出来,似乎合并了结果。

基本上,我需要的是有一个查询,但使用两个独占的 SELECT 语句。这个可以吗?

我什至愿意在 PHP 中做一些允许合并两个查询的结果集的事情。

【问题讨论】:

  • 如果两个表没有链接,请尝试 UNION。但是两者的字段计数必须相同,因此如果字段计数不同或将来发生变化,SELECT * 可能不起作用

标签: php mysql select


【解决方案1】:

我猜你想加入行(不是列对吗?)。为了解决您的问题,您将为此使用UNION

SELECT  columnA
FROM    product
WHERE   title LIKE '%$keyword%' OR 
        content LIKE '%$keyword%'
UNION
SELECT  columnA
FROM    product_spray
WHERE   title LIKE '%$keyword%' OR 
        content LIKE '%$keyword%'

只需确保两个查询在结果集中具有相同的列。

【讨论】:

    【解决方案2】:
    mysq_query("SELECT A.*,B.* FROM 
    product as A
    left join product_spray as B ON B.title LIKE '%$keyword%' = A.title LIKE '%$keyword%' 
    WHERE B.content LIKE '%$keyword%' OR B.content LIKE '%$keyword%'")
    AND don't A.*  this sol - select A.title , A.content from xxx 
    

    【讨论】:

    • 表之间没有关系
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-11
    相关资源
    最近更新 更多