我应该使用MySQL程序进行此查询吗?

时间:2013-03-20 11:06:11

标签: mysql sql database random

我想制作存储过程,但我不知道什么是正确的方法,或者甚至可以在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;获取一条随机记录 example2:我们有一条记录city=Amsterdam +我们在region="north Holland"
  3. 中随机记录2条

    这可能与SQL有关或者我应该在php中获取所有记录然后遍历每个记录吗?

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

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

2 个答案:

答案 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以获得其他随机结果。