大家好我有两张桌子 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;
但是当我在这段代码中实现分页时,它会更复杂。如果有一种方法可以在单个查询中执行此操作,那么它很容易实现。
所以最后我想要获取特定区域的数据,如果没有,则获取所选区域的城市数据。
我希望你明白我想说的话。
感谢高级。 :)
答案 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_
为表添加前缀是多余的,因此我会避免使用它。