concat()如何查询搜索字符串?

时间:2012-06-27 04:12:10

标签: php mysql

我有一个包含以下行的表格设置:

orderfrom                               | Name
-------------------------------------------------------
ClearVision, Oakley, I-Deal Optics      | ClearVision
ClearVision                             | I-Deal Optics
ClearVision                             | Oakley

我想要一个查询,它将选择“orderfrom”列中“Name”值而不是的行。在这种情况下,它将返回第2行和第3行,但不返回第一行(因为“ClearVision”在orderfrom列中)。

这是我尝试过的:

SELECT * FROM `dist`
    JOIN `patientacct`
        ON `patientacct`.dist LIKE CONCAT('%', `dist`.name ,'%')
    INNER JOIN `treasure`
        ON `treasure`.`id` = `patientacct`.`id`
        WHERE (status = 'To Order' AND ****** ORDER BY `name` ASC);

** 部分是我需要帮助的地方。我试过这个:

(( `dist`.name NOT LIKE CONCAT('%',`patientacct`.orderfrom,'%')) ))

2 个答案:

答案 0 :(得分:0)

我不确定,但这个简单的代码工作得不会那么好吗?

mysql> select * from stringComp;
+------------------------------------+---------------+
| value1                             | value2        |
+------------------------------------+---------------+
| ClearVision, Oakley, I-Deal Optics | ClearVision
  |
| ClearVision                        | I-Deal Optics |
| ClearVision                        | Oakley        |
| ClearVision, Oakley, I-Deal Optics | ClearVision   |
+------------------------------------+---------------+
4 rows in set (0.00 sec)

注意第1行的值2周围有额外的空格。

mysql> select * from stringComp where value1 not like concat('%',value2,'%');
+------------------------------------+---------------+
| value1                             | value2        |
+------------------------------------+---------------+
| ClearVision, Oakley, I-Deal Optics | ClearVision
  |
| ClearVision                        | I-Deal Optics |
| ClearVision                        | Oakley        |
+------------------------------------+---------------+
3 rows in set (0.00 sec)

这个简单的SQL比较列value2的内容,看它们是否在列value1中,并返回它们不在的行。

所以,为了回答你的问题,我认为where子句中的这个小片段会给你正确的结果: value1不像concat('%',value2,'%')

编辑:我刚刚在您的查询中看到了额外的一行:我认为

中有一个额外的括号
(( `dist`.name NOT LIKE CONCAT('%',`patientacct`.orderfrom,'%')) ))

应该是:

(( `dist`.name NOT LIKE CONCAT('%',`patientacct`.orderfrom,'%')))

编辑2:为什么你在那里有所有这些括号?

SELECT 
    * 
FROM 
    `dist`
    JOIN `patientacct`
        ON `patientacct`.dist LIKE CONCAT('%', `dist`.name ,'%')
    INNER JOIN `treasure`
        ON `treasure`.`id` = `patientacct`.`id`
WHERE 
    status = 'To Order' 
    AND `dist`.name NOT LIKE CONCAT('%',`patientacct`.orderfrom,'%')
ORDER BY
    `name` ASC;

答案 1 :(得分:0)

INNER JOIN treasure         在treasureid = patientacctid 哪里     status ='To Order'     和dist。名称不喜欢CONCAT('%',patientacct。orderfrom,'%')