我想创建存储过程,但是我不知道什么是正确的方法,或者即使在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个结果,并且需要按以下顺序创建结果:


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


使用SQL可以做到这一点吗?还是应该在php中获取所有记录,然后遍历每个记录?

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

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

最佳答案

你应该尝试像

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

07-26 01:47