gpt4 book ai didi

php - 如何从列略有不同的两个表中选择行?我怎样才能抵消它们?

转载 作者:行者123 更新时间:2023-11-29 03:23:40 24 4
gpt4 key购买 nike

我正在为一个房地产应用程序构建一个搜索功能,我试图在每个页面上显示 100 个过滤属性。

第一次加载的 SQL 如下所示:

$sql = "SELECT * FROM table WHERE bedrooms = 2 LIMIT 100";

后续加载基本相同,只是多了一个offset。偏移量定义为页码减一,再乘以每页的属性。

$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;

但是,因为每个表都有一些不同的列,所以我得到这个错误:

使用的 SELECT 语句具有不同的列数

两个表都有 60 或更多列,但大多数列是相同的。有没有办法从两个表中选择满足 WHERE 条件的行?

此外,OFFSET 如何与 JOIN 一起使用?如何对从两个表中选择的结果进行“分页”?

最佳答案

您的查询需要与此类似:

$sql = "
SELECT * FROM
(
(SELECT col1, col2, col3, col4 FROM table1 WHERE bedrooms = 2)
UNION ALL
(SELECT col1, col2, col3, NULL AS col4 FROM table2 WHERE bedrooms = 2)
) AS myalias
LIMIT ".$propertiesPerPage." OFFSET ".$offset;

几件事:

  1. 在每个SELECT 语句的相应位置列出的选定列应该具有相同的数据类型。 ( http://dev.mysql.com/doc/refman/5.7/en/union.html )

  2. 假设您希望它返回所有行,但存在数据类型不匹配或一个表具有完全不同的列。您仍然可以从包含数据的表 1 中检索数据,但如果表 2 没有该列,那么您将需要类似 NULL AS col4 的内容。

  3. 我们将联合用作嵌套查询的原因是因为限制将在两个查询连接在一起后应用。

  4. 通常,在执行联合时,您会非常具体地指定要获取的列。如果您只需要 30 列,则需要在用于联合的选择查询中指定所有这些列。如果有必要,您可以使用 PHP 变量来定义它以减少重复。

关于php - 如何从列略有不同的两个表中选择行?我怎样才能抵消它们?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39863867/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com