将两行合并为一个字符串

Bon*_*nik 1 php mysql sql

我有动态数据库,我想在这个表中搜索

FieldID | Content | TypeID
--------------------------
ABC-123 | jon     | 1
EFG-456 | doe     | 1
HIJ-789 | man     | 1
Run Code Online (Sandbox Code Playgroud)

所以我的SELECT查询看起来像这样:

SELECT 
    GROUP_CONCAT(fieldsContent.Content SEPARATOR '|*|') AS Content, 
    GROUP_CONCAT(fieldsContent.FieldID SEPARATOR '|*|') AS FieldID, 
FROM (`customers`) 
LEFT OUTER JOIN `fieldsContent` ON `fieldsContent`.`TypeID` = `customers`.`ID` 
GROUP BY `fieldsContent`.`TypeID` 
ORDER BY `customers`.`Created` DESC
Run Code Online (Sandbox Code Playgroud)

结果看起来像这样

Array
(
    [0] => stdClass Object
        (
            [Content] => jon|*|doe|*|man
            [FieldID] => ABC-123|*|EFG-456|*|HIJ-789
        )
)
Run Code Online (Sandbox Code Playgroud)

当我添加HAVING并仅搜索时jon,它会返回结果

HAVING Content LIKE "%jon%" 
Run Code Online (Sandbox Code Playgroud)

但是,当我尝试搜索时jon doe,它将返回空结果

HAVING Content LIKE "%jon doe%"
Run Code Online (Sandbox Code Playgroud)

因为jon doe字符串中不存在,只有jon|*|doe

那么如何将这两行合并为一个字符串而不使用SEPARATOR来搜索它们jon doe呢?

但!!请记住,我需要获取SEPARATOR因为我需要结合要在php中使用的数据.

例如:

$field = explode('|*|',$data->FieldID);
$content = explode('|*|',$data->Content);

foreach($field as $k => $FieldID){
    switch($FieldID){
        case 'ABC-123':
            $res['first_name'] = $content[$k];
        break;
        case 'EFG-456':
            $res['last_name'] = $content[$k];
        break;
        case 'HIJ-789':
            $res['gender'] = $content[$k];
        break;      
    }
}
Run Code Online (Sandbox Code Playgroud)

任何想法将不胜感激:)

Rol*_*DBA 7

尝试这个#1

HAVING Content LIKE "%jon%doe%"
Run Code Online (Sandbox Code Playgroud)

尝试这个#2

HAVING Content LIKE "%jon" AND Content LIKE "%doe%"
Run Code Online (Sandbox Code Playgroud)

尝试这个#3

HAVING REPLACE(Content,'|*|',' ') LIKE "%jon doe%"
Run Code Online (Sandbox Code Playgroud)

试试看 !!!:-)

  • 我几乎失望了,因为它没有给它一个尝试!在底部 (3认同)