Php 如何在一个查询中连接这两个查询?

Php 如何在一个查询中连接这两个查询?,php,mysql,sql,database-design,Php,Mysql,Sql,Database Design,我有第一个问题。 SELECT item.id, item.name, item.description, item.tnURL, item.spec_id, item.item_type, item.sub_category FROM item, fb_item_promo WHERE fb_item_promo.item_id=item.id; SELECT item.id, item.name, item.description, item.tnUR

我有第一个问题。

SELECT item.id, item.name, item.description, 
       item.tnURL, item.spec_id, item.item_type, item.sub_category  
FROM item, fb_item_promo 
WHERE fb_item_promo.item_id=item.id;
SELECT item.id, item.name, item.description, 
       item.tnURL, item.spec_id, item.item_type, item.sub_category  
FROM item 
WHERE item.description LIKE '%package%';
和第二个查询。

SELECT item.id, item.name, item.description, 
       item.tnURL, item.spec_id, item.item_type, item.sub_category  
FROM item, fb_item_promo 
WHERE fb_item_promo.item_id=item.id;
SELECT item.id, item.name, item.description, 
       item.tnURL, item.spec_id, item.item_type, item.sub_category  
FROM item 
WHERE item.description LIKE '%package%';
我需要组合第一个查询结果和第二个查询结果。我怎样才能更快地完成它

@Fosco您的查询似乎有效,但如果我想在项的所有结果中添加搜索功能,该怎么办?name?我试过这个,但它仍然得到了所有的fb\u item\u promo.item\u id结果

新查询:

SELECT item.id, item.name, item.description, item.tnURL,item.spec_id, 
 item.item_type, item.sub_category 
FROM item 
LEFT JOIN fb_item_promo 
ON fb_item_promo.item_id = item.id 
WHERE fb_item_promo.item_id IS NOT NULL 
OR item.description LIKE '%package%' 
AND item.name LIKE '%my item name%'

结果是它搜索正确的项目,但仍然返回存在的fb\u item\u promo.item\u id上的所有项目。如何对该结果运行筛选器?

将第一个查询中的所有记录加上第二个查询中的记录都包括在内是没有意义的。第二个查询中的记录将已包含在第一个查询中

SELECT item.id, item.name, item.description, item.tnURL,
item.spec_id, item.item_type, item.sub_category 
FROM 
item, fb_item_promo WHERE fb_item_promo.item_id=item.id;

UNION ALL

SELECT item.id, item.name, item.description, item.tnURL, 
item.spec_id, item.item_type, item.sub_category
FROM 
item WHERE item.description LIKE '%package%';
我想这就是你需要的:

SELECT item.id, item.name, item.description, 
       item.tnURL, item.spec_id, item.item_type, 
       item.sub_category 
FROM item
left JOIN fb_item_promo ON fb_item_promo.item_id=item.id
WHERE fb_item_promo.item_id is not null
  or item.description LIKE '%package%'

您可以在一个查询中执行此操作,而无需使用
联合

select i.id, 
    i.name, 
    i.description, 
    i.tnURL, 
    i.spec_id, 
    i.item_type, 
    i.sub_category  
from item i
left join fb_item_promo ip on i.id = ip.item_id
where ip.item_id is not null 
    or i.description LIKE '%package%';

您可以使用子查询而不是innerjoin:

SELECT item.id, item.name, item.description, 
   item.tnURL, item.spec_id, item.item_type, item.sub_category  
FROM item
WHERE item.description LIKE '%package%'
AND item.id IN (SELECT item_id FROM fb_item_promo);

您关于使用
UNION ALL
返回重复记录的解决方案的观点(使用
UNION
可以减少重复记录)得到了很好的理解。但是,您的解决方案遇到了一个更糟糕的问题:它排除了fb_item_promo中不存在的记录。@Fosco这似乎有效。如果我想在联合查询的所有结果中向item.name添加搜索函数,该怎么办?比如“和item.name比如“%which item name%”我该怎么做?谢谢@wpleet我现在就把WHERE子句中的所有内容都放在括号中,然后像你提到的那样添加and子句。@Fosco现在是这样的吗
其中(fb_item_promo.item_id不为NULL或item.description(如“%package%”)和item.name(如“%item name%”