【发布时间】:2016-10-05 00:53:37
【问题描述】:
我正在为房地产应用构建搜索功能,并尝试在每页显示 100 个过滤属性。
我的第一次加载的 SQL 如下所示:
$sql = "SELECT * FROM table WHERE bedrooms = 2 LIMIT 100";
后续加载基本相同,只是多了一个偏移量。偏移量的定义是页码减一,再乘以每页的属性。
$page = $_GET[‘page’] - 1;
$propertiesPerPage = 100;
$offset = $page * $propertiesPerPage;
$sql = "SELECT * FROM table WHERE bedrooms = 2 LIMIT 100 OFFSET ".$offset;
这很好用。现在我只想做同样的事情,但是从两个表而不是一个表中获取属性。我正在尝试这个:
$sql = "SELECT * FROM table1 WHERE bedrooms = 2";
$sql .= " UNION ALL ";
$sql .= "SELECT * FROM table2 WHERE bedrooms = 2 LIMIT ".$propertiesPerPage." OFFSET ".$offset;
但是,因为每个表都有几个不同的列,所以我收到了这个错误:
The used SELECT statements have a different number of columns
两个表都有 60 列或更多列,但大多数列是相同的。
有没有办法从满足WHERE 条件的两个表中选择行?
另外,OFFSET 如何与JOINs 一起工作?如何对从两个表中选择的结果进行“分页”?
【问题讨论】:
-
你需要提供列名,你可以在它们不匹配的地方使用 alaisis
-
如果列数不匹配,不能
UNION,不能用SELECT *,句号。 -
另外,如果数据类型不匹配,则不能使用 UNION
-
你可以做 2 个查询并通过 php 处理所有的分页
标签: php mysql join inner-join offset