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

我应该使用MySQL过程进行此查询吗?,mysql,sql,database,random,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

我想创建存储过程,但我不知道什么是正确的方法,或者在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个或更多城市,我们可以选择阿姆斯特丹,该城市的名称=阿姆斯特丹,然后随机返回阿姆斯特丹的3个城市 如果阿姆斯特丹少于3条记录,则返回阿姆斯特丹+返回随机记录的任何记录,其中region=北荷兰,但返回的记录总数应始终为3例如:我们有2条记录,其中city=阿姆斯特丹+我们从region=北荷兰取一条随机记录; 例2:我们有一个记录,其中城市=阿姆斯特丹+我们有两个随机记录,区域=北荷兰 这是可以用SQL实现的,还是应该用php获取所有记录,然后遍历每个记录

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


到目前为止,我已经尝试了一些基本的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;

你应该试试这样的东西

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

我建议您主要使用php完成这项工作的逻辑部分。虽然可以在sql中执行,但我发现sql中的逻辑结构往往很难遵循,这在php中不是什么问题

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


我将运行一个查询,以获取sql中最初的三个使用限制3。检查是否有三个结果。如果没有,请从3中减去您确实得到的数量,然后在第二次查询中使用该数量作为限制,以获得其他随机结果。

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

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


我将运行一个查询,以获取sql中最初的三个使用限制3。检查是否有三个结果。如果没有,从3中减去你得到的金额,然后在第二次查询中使用该金额作为限制,以获得其他随机结果。

啊,这也行,但是,您需要在第二个选择中排除城市名称“阿姆斯特丹”,否则您可能会在第一个选择中得到相同的记录,其中区域=“北荷兰”和城市名称“阿姆斯特丹”,啊,这也会起作用,但您需要在第二次选择中排除城市名称“阿姆斯特丹”,否则您可能会在第一次选择中得到相同的记录,其中区域=“北荷兰”和城市名称“阿姆斯特丹”