【问题标题】:How to select two random rows with same category in MySQL [duplicate]如何在MySQL中选择两个具有相同类别的随机行[重复]
【发布时间】:2013-10-08 09:38:38
【问题描述】:

我是 javascript 和 nodejs 的初学者,对 mysql 了解不多。 这些是我的 MySQL 表的列名,其名称为 cars

  • 姓名
  • 型号
  • 传输类型
  • 引擎尺寸
  • 车辆尺寸
  • 体型

我想从cars中随机选择Namemodel,但是类别必须匹配,这将由其他四个列决定:TransmissionTypeEngineSizeVehicleSizeBody Type ,这样随机选择的汽车必须为engineTransmissionTypeVehicheSizeBodyType 共享相同的值。输出应该只有两行。

引擎大小有值:3.2, 3.5, 1.6, 5.2, 2.0, 2.2

TransmissionType 具有值:ManualAutomatic

VehicleSize 具有值:CompactMidSizeLarge

BodyType 具有值:Carvantruck

我应该编写什么查询来实现这一点?请帮忙。

我这样做了,查询工作正常,但是其中运行的子查询太多,是否可以使用不更多的 den 2-3 子查询来实现这一点?

SELECT Name, model 
FROM cars 
WHERE EngineSize IN (SELECT * FROM (SELECT EngineSize FROM cars  ORDER BY RAND( ) LIMIT 1 ) AS A)  
AND TransmissionType IN (SELECT * FROM (SELECT TransmissionType  FROM cars ORDER BY RAND( ) LIMIT 1 ) AS B)
AND BodyType IN (SELECT * FROM (SELECT BodyType  FROM cars ORDER BY RAND( ) LIMIT 1 ) AS C)   
AND VehicleSize IN (SELECT * FROM (SELECT VehicleSize` FROM cars ORDER BY RAND( ) LIMIT 1 ) AS D)    
LIMIT 2

【问题讨论】:

    标签: mysql sql


    【解决方案1】:

    如果您正在搜索与某些类别匹配的车辆列表,您可以这样做;

    SELECT Name, model, Id * RAND() AS random_no
    FROM   cars
    WHERE  EngineSize = '2.2'
    AND    TransmissionType = 'Automatic'
    AND    VehicleSize = 'Large'
    AND    BodyType = 'Car'
    ORDER by random_no
    LIMIT 1
    

    如果您是动态执行此操作,则应通过 javascript 中的参数传递值(在上面的示例中为硬编码)。

    【讨论】:

    • 其实我的代码需要随机行,这个查询会显示具体的结果。
    • 添加ORDER BY RAND() LIMIT 1
    • 你的表中有 ID 吗?
    • 是的,ID 文件在表格中。
    • 数据库非常庞大,我无法使用 javascript 传递参数。根据要求,它必须单独在 SQL 查询中。
    【解决方案2】:
    SELECT Name, model
    FROM   cars
    WHERE  EngineSize = '2.2'
    AND    TransmissionType = 'Automatic'
    AND    VehicleSize = 'Large'
    AND    BodyType = 'Car'
    ORDER by RAND()
    LIMIT 2
    

    此选择将选择所有符合 where 子句的结果,以随机方式重新排序结果,然后将返回限制为符合条件的前 2 个。有关详细信息,请参阅this blog、这些instructions 和这个SO post

    【讨论】:

      猜你喜欢
      • 2016-09-29
      • 2017-05-17
      • 2015-04-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-06-26
      • 1970-01-01
      • 2012-06-24
      相关资源
      最近更新 更多