我想创建存储过程,但是我不知道什么是正确的方法,或者即使在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;