【问题标题】:select one column using multiple like statement in mysql在mysql中使用多个like语句选择一列
【发布时间】:2019-03-27 05:33:59
【问题描述】:

我正在使用 php pdo 和 mysql,我想使用 like 语句再选择一列。目前我有这个查询。这个查询工作正常。

$get_name = $db->prepare("SELECT dou.businessName, m.ownerid FROM dineOwnerUser AS dou INNER JOIN menu AS m ON dou.id = m.ownerid WHERE
(m.firstFood LIKE '%$text%'
OR m.secondFood LIKE '%$text%'
OR m.thirdFood LIKE '%$text%'
OR m.fourthFood LIKE '%$text%'
OR m.fifthFood LIKE '%$text%'
OR m.sixthFood LIKE '%$text%'
OR m.seventhFood LIKE '%$text%'
OR m.eightFood LIKE '%$text%'
OR m.ninthFood LIKE '%$text%'
OR m.tenthFood LIKE '%$text%')");

正如您现在所看到的,我在食物栏的帮助下只获得了企业名称和所有者 ID。现在我想选择用户输入的确切列,但我不知道如何对该确切列进行排序并从我尝试过的几列中选择它。

SELECT dou.businessName , m.ownerid,
(m.firstFood LIKE '%$text%'
OR m.secondFood LIKE '%$text%'
OR m.thirdFood LIKE '%$text%'
OR m.fourthFood LIKE '%$text%'
OR m.fifthFood LIKE '%$text%'
OR m.sixthFood LIKE '%$text%'
OR m.seventhFood LIKE '%$text%'
OR m.eightFood LIKE '%$text%'
OR m.ninthFood LIKE '%$text%'
OR m.tenthFood LIKE '%$text%') FROM dineOwnerUser AS dou INNER JOIN menu AS m ON m.ownerid = dou.id WHERE
(m.firstFood LIKE '%$text%'
OR m.secondFood LIKE '%$text%'
OR m.thirdFood LIKE '%$text%'
OR m.fourthFood LIKE '%$text%'
OR m.fifthFood LIKE '%$text%'
OR m.sixthFood LIKE '%$text%'
OR m.seventhFood LIKE '%$text%'
OR m.eightFood LIKE '%$text%'
OR m.ninthFood LIKE '%$text%'
OR m.tenthFood LIKE '%$text%')

但它没有选择所需的列。 注意:“%text%”来自表单输入字段,一切正常,我只需要正确的 mysql 查询。

已编辑:基本上我想选择确切的食物列,假设用户输入 b,biryani 在“secondFood”列中,所以我想沿着 businessName 和 m.ownerid 选择该列。

【问题讨论】:

  • 食物栏编号?您是否错过了创建新表(可能带有数字列)并加入它的机会。
  • dineOwnerUser's id is fk in menu table with name of ownerid(来自dineOwnerUser表)
  • {first,second,third....tenth}food - 似乎应该有一个 food( item VARCHAR, num UNSIGNED INT) 表,而不是全部都在菜单表中。
  • this is menu table # Name Type Collat​​ion Attributes Null Default Comments Extra 1 idPrimary int(11) UNSIGNED No None AUTO_INCREMENT 2 firstFood varchar(30) utf8mb4_unicode_ci 是 NULL 3 priceone varchar(10) utf8mb4_unicode_ci 是 NULL 4 secondFood varchar(30) utf8mb4_unicode_ci 是 NULL
  • 这是 dineowneruser 表。 # Name Type Collat​​ion Attributes Null Default Comments Extra 1 idPrimary int(11) No None AUTO_INCREMENT 2 firstName varchar(25) utf8mb4_unicode_ci No None 3 lastName varchar(25) utf8mb4_unicode_ci No None 4 email varchar(60) utf8mb4_unicode_ci No None 5 password varchar(255 ) utf8mb4_unicode_ci 无 无 6 businessName varchar(70) utf8mb4_unicode_ci 无 无

标签: php mysql mysqli mysql-workbench mysql-python


【解决方案1】:

我认为您想通过 word 选择特定列,例如用户类型 p 并且意大利面在名为 m.tenthFood 的列中,然后您想要此列的值并将其显示到您的网站,如果您认为这是不可能的,因为在子查询中,多列(结果)不能出现,因此您的查询在这里失败。正如您所说,您正在使用 php pdo,这意味着您在某处显示此值,因此您必须选择所有列,然后执行一些逻辑以删除空列或空列,然后仅显示具有意大利面、波里、panir 等的列.为此,您需要此查询。

    SELECT dou.businessName , m.ownerid, IF (m.firstFood LIKE '%r%', m.firstFood, "no")
, IF (m.secondFood LIKE '%r%', m.secondFood, "no")
, IF (m.thirdFood LIKE '%r%', m.thirdFood, "no")
, IF (m.fourthFood LIKE '%r%', m.fourthFood, "no")
, IF (m.fifthFood LIKE '%r%', m.fifthFood, "no")
, IF (m.sixthFood LIKE '%r%', m.sixthFood, "no")
, IF (m.seventhFood LIKE '%r%', m.seventhFood, "no")
, IF (m.eightFood LIKE '%r%', m.eightFood, "no")
, IF (m.ninthFood LIKE '%r%', m.ninthFood, "no")
, IF (m.tenthFood LIKE '%r%', m.tenthFood, "no")
FROM dineOwnerUser AS dou INNER JOIN menu AS m ON m.ownerid = dou.id WHERE
(m.firstFood LIKE '%r%'
OR m.secondFood LIKE '%r%'
OR m.thirdFood LIKE '%r%'
OR m.fourthFood LIKE '%r%'
OR m.fifthFood LIKE '%r%'
OR m.sixthFood LIKE '%r%'
OR m.seventhFood LIKE '%r%'
OR m.eightFood LIKE '%r%'
OR m.ninthFood LIKE '%r%'
OR m.tenthFood LIKE '%r%')

说明: 在 WHERE 子句之后,它被称为子查询,它只会返回一个答案(用通用语言),因此您正在检查哪一列有一些包含“P”的内容,然后您将获取 ownerid 和企业名称以及所有食物列。在包含 IF 语句的上部,它将返回列的值,如果不包含它将返回“no”。通过使用条件,您可以忽略那些列并仅显示您需要的正确列,例如意大利面、panir ..... 我希望这对你有用。 干杯

【讨论】:

    【解决方案2】:

    您可以使用 IF 或 CASE 替换选择,但查询可能很难看

    IF (m.firstFood IS NOT NULL, CONCAT('firstFood:', m.firstFood), 
      IF (m.secondFood IS NOT NULL, CONCAT('secondFood:', m.secondFood),
        IF (m.thirdFood IS NOT NULL, CONCAT('thirdFood:', m.thirdFood),
          IF (m.fourthFood IS NOT NULL, CONCAT('fourthFood :', m.fourthFood ),
    ...................................
    )))) as thirdColumn
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-10-12
      • 2013-03-01
      • 1970-01-01
      • 2017-07-26
      • 1970-01-01
      相关资源
      最近更新 更多