我怎么知道从查询中获得哪个表?

时间:2015-10-02 11:53:24

标签: mysql sql

我构建了这段代码,我想做多搜索。

从表格搜索:商品,商店,类别。

但是,当我在查询之间建立联盟时,我无法进行链接。

  • 类别需要category.php?id=1
  • 项目需要item.php?id=1
  • 商店需要store.php?id=1

但是当我结合时,我得到了这个:

id | name 
----------
1 | google
2 | love 
3 | shop 

$query = '(SELECT id,name FROM `item` WHERE `accepted` = '1' AND `name` LIKE '%".$search."%')
           UNION ALL
           (SELECT id,name FROM `category` WHERE `name` LIKE '%".$search."%')
           UNION ALL
           (SELECT id,name FROM `store` WHERE `accepted` = '1' AND `name` LIKE '%".$search."%')
           LIMIT 25
';


我怎么知道哪个表格能得到这些信息呢?
谢谢!

3 个答案:

答案 0 :(得分:1)

将表添加到子查询中:

(SELECT id, name, 'item' as which FROM `item` WHERE `accepted` = '1' AND `name` LIKE '%".$search."%')
UNION ALL
(SELECT id, name, 'category' as which FROM `category` WHERE `name` LIKE '%".$search."%')
UNION ALL
(SELECT id, name, 'store' as which FROM `store` WHERE `accepted` = '1' AND `name` LIKE '%".$search."%');
LIMIT 25

答案 1 :(得分:0)

只需添加一个包含源名称的虚拟列:

$query = '(SELECT "item" as table, id,name FROM `item` WHERE `accepted` = '1' AND `name` LIKE '%".$search."%')
           UNION ALL
           (SELECT "category" AS table, id,name FROM `category` WHERE `name` LIKE '%".$search."%')
           UNION ALL
           (SELECT "store" AS table, id,name FROM `store` WHERE `accepted` = '1' AND `name` LIKE '%".$search."%')
           LIMIT 25
';

答案 2 :(得分:0)

将其作为值添加到您的查询中:

$query = "(SELECT id,name,'item' FROM `item` WHERE `accepted` = '1' AND `name` LIKE '%".$search."%')
           UNION ALL
           (SELECT id,name,'CATEGORY' FROM `category` WHERE `name` LIKE '%".$search."%')
           UNION ALL
           (SELECT id,name,'STORE' FROM `store` WHERE `accepted` = '1' AND `name` LIKE '%".$search."%')
           LIMIT 25";

所以你会知道记录的来源