我想制作存储过程,但我不知道什么是正确的方法,或者甚至可以在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个结果,并且需要按此顺序创建结果:
city_name=Amsterdam
然后在阿姆斯特丹随机返回3个城市region=North-Holland
的随机记录,但返回的记录总数应始终为3(示例: 我们有2条记录city= Amsterdam
+我们从region=North Holand;
获取一条随机记录
example2:我们有一条记录city=Amsterdam
+我们在region="north Holland"
这可能与SQL有关或者我应该在php中获取所有记录然后遍历每个记录吗?
我可能需要在过程(city_name,region)中传递2个参数。
到目前为止,我已经尝试了一些基本的SQL查询,但我无法让它工作。
答案 0 :(得分: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;
答案 1 :(得分:1)
我建议你主要在php中做这个逻辑部分。虽然可以在sql中进行,但我发现sql中的逻辑结构往往难以理解,这在php中不是问题。
在php中执行逻辑可能需要两个单独的查询(但前提是你最初没有得到3个。)
我会运行一个查询来获取前三个(在SQL中使用LIMIT 3
)。检查你是否有三个结果。如果没有,请从3中减去您获得的金额,然后在第二个查询中将其用作LIMIT
以获得其他随机结果。