如何组合来自不同表的两个查询的结果?

时间:2017-05-12 10:59:40

标签: php mysql codeigniter

大家好我有两张桌子 1.Table_Shop 2.Table_City

1.Table_Shop: -

Fields : id, shopname, address, area_name, contact

2.Table_City: -

Fields : id, area_name(same as table_shop), city

两个表中的公共字段:area_name

现在我想使用area_name和city搜索商店。 第一个优先级是area_name,如果可用的数据较少,则按城市提取。

E.g。 See this,  我想取一个特定区域的移动商店的3条记录,例如“河前”等。但这里只有1条记录可用,但我需要3条,所以剩下的2条记录来自当地的河边城市艾哈迈达巴德。所以我需要从车站路啊艾哈迈达巴德取下两条记录。

我试图执行以下两个不同的查询,

我的代码: -

 $q1=mysql_fetch_array(mysql_query("select * from Table_Shop where area_name='river front'"));

$tot_q1=count($q1);

if($tot_q1<3)

{

  $q2=mysql_fetch_array(mysql_query("select * from Table_City where city='ahmedabad' and area_name!='river front'"));

// i add this line *area_name!='river front'* to stop duplicate value such as if river front(mobile shop) is already fetched then i dont need to fetch it again.

}

return $q1+q2;

但是当我在这段代码中实现分页时,它会更复杂。如果有一种方法可以在单个查询中执行此操作,那么它很容易实现。

所以最后我想要获取特定区域的数据,如果没有,则获取所选区域的城市数据。

我希望你明白我想说的话。

感谢高级。 :)

1 个答案:

答案 0 :(得分:0)

尝试类似

的内容
SELECT * from (
    SELECT table_shop.id, table_shop.shopname, table_shop.address, 
table_shop.area_name, table_city.city
        FROM table_shop
        JOIN table_city on table_shop.area_name = table_city.area_name
        WHERE area_name='river front'
    UNION
    SELECT table_shop.id, table_shop.shopname, table_shop.address, table_shop.area_name, table_city.city
        FROM table_shop
        JOIN table_city on table_shop.area_name = table_city.area_name
        WHERE area_name!='river front' 
            AND table_city.city='ahmedabad') limit 3 

SELECT table_shop.id, table_shop.shopname, table_shop.address, 
table_shop.area_name, table_city.city
    FROM table_shop
    JOIN table_city on table_shop.area_name = table_city.area_name
    WHERE table_shop.area_name='river front' OR  table_city.city='ahmedabad'
    ORDER BY table_shop.area_name <> 'river front',
    priority 
    limit 3

此外,通过文本列area_name链接表格并不是一个好主意。我建议你创建第三个表,

area {id, name, city_id}

table_shop更改为

shop {id, name, address, area_id, contact}

并将table_city更改为

city {id, name}

此外,使用table_为表添加前缀是多余的,因此我会避免使用它。