0

我想制作存储过程,但我不知道什么应该是正确的方法,或者这是否可以在 MySQL 中完成。

让我向您介绍我的问题。假设我有一个包含这样列的表:

TABLE A
id  | Hotel  |  city_name  |  region_name  | country
 1  |   A    |   Amsterdam | North-Holland | Netherlands
 2  |   B    |   Amsterdam | North-Holland | Netherlands
 3  |   C    |   Leiden    | North-Holland | Netherlands
 4  |   D    |   Katwijk   | North-Holland | Netherlands
 5  |   E    |   Leiden    | North-Holland | Netherlands
 6  |   F    |   Katwijk   | North-Holland | Netherlands

每次执行此查询时,我只想获得 3 个结果,并且需要按以下顺序创建结果:

  1. 如果有 3 个或更多城市(在这种情况下用户选择我们可以选择阿姆斯特丹),city_name=Amsterdam则返回阿姆斯特丹的随机 3 个城市
  2. 如果阿姆斯特丹的记录少于 3 条,则返回任何具有阿姆斯特丹的记录 + 返回随机记录,region=North-Holland但返回的记录总数应始终为 3(例如:我们有 2 条记录,其中city= Amsterdam+ 我们采用一条随机记录来自region=North Holand; 示例 2:我们有一个记录city=Amsterdam+ 我们有 2 个随机记录 where region="north Holland")

用 SQL 可以做到这一点吗?或者我应该在 php 中获取所有记录,然后遍历每条记录?

我可能需要在过程中传递 2 个参数(city_name,region)。

到目前为止,我已经尝试了一些基本的 SQL 查询,但我无法让它工作。

4

2 回答 2

2

你应该尝试类似的东西

(SELECT *
FROM A
WHERE city_name = 'Amsterdam'
ORDER BY RAND()
LIMIT 3)

UNION

(SELECT *
FROM A
WHERE region = 'North Holand' AND city_name <> 'Amsterdam'
ORDER BY RAND()
LIMIT 3)

LIMIT 3;
于 2013-03-20T11:37:38.863 回答
1

我建议您主要在 php.ini 中执行此操作的逻辑部分。虽然可以在 sql 中完成,但我发现 sql 中的逻辑结构往往难以遵循,而这在 php 中不是问题。

在 php 中执行逻辑可能需要两个单独的查询(但前提是您最初没有得到 3 个)。

我会运行一个查询来获取前三个(LIMIT 3在 sql 中使用)。检查你是否得到三个结果。如果你没有,从 3 中减去你得到的数量,然后LIMIT在第二个查询中使用它来获得其他随机结果。

于 2013-03-20T11:42:18.287 回答