【问题标题】:How To Select all row from mysql table that contains atleast one value greater than search value?如何从mysql表中选择包含至少一个大于搜索值的值的所有行?
【发布时间】:2017-10-07 15:46:24
【问题描述】:

例如我想从下表中选择所有 Row 其中 Data 包含大于或等于 5 的值。即第 11、13、14 和 16 行。

╔════╦═══════════════════╗
║ ID ║ Data              ║
╠════╬═══════════════════╣
║ 10 ║ 2 or 3            ║
║ 11 ║ 5 and 6           ║
║ 12 ║ 3 or 4            ║
║ 13 ║ 5 or 6(Optional)  ║
║ 14 ║ 5                 ║
║ 15 ║ 1 or 2            ║
║ 16 ║ 6 (Optional) or 3 ║
╚════╩═══════════════════╝

【问题讨论】:

  • data 是什么数据类型?
  • 您能否详细说明数据列,它是什么类型以及 or 和 optional 在您的数据库上下文中的确切含义。
  • Data的数据类型是varchar。 @黑豹
  • 我认为您目前的情况并不容易实现。你应该考虑找到一种不同的方法来实现这一点,要么改变你的数据库结构,要么改变你的概率。
  • Data的数据类型是varchar。例如。有些手机有两种变体。您可以选择 2GB RAM 3GB RAM(第 1 行)。一些手机带有两个后置摄像头 5MP 6MP(第 2 行)等。@GustavoMagalhães

标签: php mysql mysqli


【解决方案1】:

我以类似的方式解决了这个问题。

CREATE FUNCTION explode(str VARCHAR(255), delim VARCHAR(12), pos INT)
RETURNS VARCHAR(255)
RETURN REPLACE(SUBSTRING(SUBSTRING_INDEX(str, delim, pos),
       LENGTH(SUBSTRING_INDEX(str, delim, pos-1)) + 1),
       delim, '');


SELECT ID,REPLACE(Data,'(Optional)','') AS data FROM `Temp` WHERE data >= 5 OR TRIM(explode(explode(data,'and',1),'or',1)) >= 5 OR TRIM(explode(explode(data,'and',1),'or',2) ) >=5 OR TRIM(explode(explode(data,'and',2),'or',1) ) >=5 OR TRIM(explode(explode(data,'and',2),'or',2) ) >=5

【讨论】:

    猜你喜欢
    • 2020-04-05
    • 2017-07-14
    • 2013-07-18
    • 1970-01-01
    • 1970-01-01
    • 2022-01-27
    • 2021-10-05
    • 1970-01-01
    • 2021-05-22
    相关资源
    最近更新 更多