确切的结果是拥有SQL

时间:2014-06-25 19:08:57

标签: mysql sql

所以我试图获得具有功能的Exact结果,并且我尝试了许多方法,但没有成功。

故事是我的SQL查询:

SELECT 
    SQL_CALC_FOUND_ROWS customers.*, 
    GROUP_CONCAT(fieldsContent.Content SEPARATOR '%||%') AS Content, 
    GROUP_CONCAT(fieldsContent.FieldID SEPARATOR '%||%') AS FieldID, 
    customers.Created, 
    customers.ID
FROM (`customers`)
    LEFT OUTER JOIN `fieldsContent` ON `fieldsContent`.`TypeID` = `customers`.`ID`
    HAVING Content LIKE "%2%" AND LIKE "%new%"
    GROUP BY `fieldsContent`.`TypeID`
    ORDER BY `customers`.`Created` DESC

结果:

stdClass Object
(
    [ID] => 4857
    [Created] => 1403714637
    [Content] => newman%||%noman%||%newemail@gmail.com%||%92292%||%old%||%7
    [FieldID] => C359FE4B-7A5B-689F-8A26-D030CFC65475%||%E34399EB-0509-2F00-EAD1-38753FCAEA5C%||%3172E7F4-B445-2F7A-74C8-F9C9E85A4C22%||%26D87695-D9F4-9E2F-2BA7-753FBF3E0BBA%||%E443B0BD-5283-CD02-F569-3B05B615B5BC%||%979C2844-870F-961F-FA28-12AC615346E5
)
stdClass Object
(
    [ID] => 175997
    [Created] => 1403714632
    [Content] => john%||%doe%||%google@gmail.com%||%0847%||%new%||%2
    [FieldID] => C359FE4B-7A5B-689F-8A26-D030CFC65475%||%E34399EB-0509-2F00-EAD1-38753FCAEA5C%||%3172E7F4-B445-2F7A-74C8-F9C9E85A4C22%||%26D87695-D9F4-9E2F-2BA7-753FBF3E0BBA%||%E443B0BD-5283-CD02-F569-3B05B615B5BC%||%979C2844-870F-961F-FA28-12AC615346E5
)

问题是我只想要第二个结果,只有我有“#34; new"和" 2", 不是在哪里这个词" new"看起来像纽曼,数字2看起来像" 92292"。

所以我只需要第二个结果,而不是第一个结果。

最重要的是,我确切知道在哪个分隔符之后的单词" new"将和" 2"将会,并且我不知道如何应用它,因为" new"总是会在第4个分隔符之后和" 2"将在第5个分隔符之后。

任何疯狂的想法如何解决这个问题? 谢谢!

1 个答案:

答案 0 :(得分:1)

改变这个:

HAVING Content LIKE "%2%" AND LIKE "%new%"

对此:

HAVING Content LIKE "%\%2" ESCAPE "\" AND LIKE "%\%new\%%" ESCAPE "\"

这假设您正在寻找FieldID“979C2844-870F-961F-FA28-12AC615346E5”字符串末尾的2。如果您需要它更灵活,您可能希望将其更改为where子句(不会破坏分组)并在子查询中专门选择FieldID / Content对。

另外,我建议使用不同的分隔符,因此您不需要使用like。

进行转义