select 一列在 mysql 中使用多个 like 语句

select one column using multiple like statement in mysql

我正在使用 php pdo 和 mysql,我想 select 使用 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 用户输入的确切列,但我不知道如何对那个确切的列进行排序,select 我试过这个。

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%')

但它 select 不是必需的列。 注意:“%text%”来自表单输入字段,每件事都完美无缺,我只需要正确的 mysql 查询。

已编辑:基本上我想 select 确切的食物列假设用户输入 b 并且 biryani 在列 "secondFood" 所以我想 select 沿 businessName 和 m.ownerid.

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

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

我想你想通过单词 select 特定列,例如用户类型 p 和 pasta 在名为 m.tenthFood 的列中然后你想要此列的值并将其显示到你的网站如果你认为这是不可能的,因为在子查询中多列(结果)不能来所以你的查询在这里失败。正如你所说你正在使用 php pdo 那意味着你在某处显示这个值所以你必须 select 所有列然后做一些逻辑来删除 null 或空列然后只显示具有的列意大利面、pori、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 子句之后,它被称为子查询,它将 return 只有一个答案(用通用语言)所以你正在检查哪个列有一些包含 "P" 的东西然后你正在获取 ownerid 和公司名称以及所有食物列。在包含 IF 语句的上半部分,它将 return colum 的值,如果它不包含它将 return "no"。通过使用条件,您可以忽略那些列,只显示您需要的正确列,例如意大利面、帕尼尔…… 我希望这对你有用。 干杯