在我的表中,我有一个字段"firstname"和一个字段"lastname".我想选择firstname + space + lastname为某个值的所有记录.
我试过这个:
$sql = "SELECT * FROM sam_users WHERE (user_firstname + ' ' + user_lastname LIKE ?)";
Run Code Online (Sandbox Code Playgroud)
但这不起作用.有了Google,我发现了一些关于使用||的东西,但我真的不明白我应该如何使用该运算符.请注意,我不想使用or-operator(什么是||在多种语言中),而是要连接2个字段(它们之间有空格)并在其上使用LIKE.
谢谢!
out*_*tis 22
使用MySQL,您可以使用CONCAT:
SELECT * FROM sam_users
WHERE CONCAT(user_firstname, ' ', user_lastname) LIKE ?
Run Code Online (Sandbox Code Playgroud)
或CONCAT_WS(忽略NULL值):
SELECT * FROM sam_users
WHERE CONCAT_WS(' ', user_firstname, user_lastname) LIKE ?
Run Code Online (Sandbox Code Playgroud)
但是,MySQL 在执行此查询时将无法使用任何索引.如果模式参数的值LIKE以通配符开头,则MySQL将无法使用索引,因此与生成的值(而不是列)进行比较不会产生影响.
您还可以将MySQL服务器SQL模式设置为"ANSI"或"PIPES_AS_CONCAT"以使用||运算符进行字符串连接.
SET @@sql_mode=CONCAT_WS(',', @@sql_mode, 'PIPES_AS_CONCAT');
SELECT * FROM sam_users
WHERE (user_firstname || ' ' || user_lastname) LIKE ?
Run Code Online (Sandbox Code Playgroud)
这仅为当前会话设置SQL模式.@@sql_mode每次连接时都需要设置.如果您希望在会话中取消设置"PIPES_AS_CONCAT"模式:
SET @@sql_mode=REPLACE(@@sql_mode, 'PIPES_AS_CONCAT', '');
Run Code Online (Sandbox Code Playgroud)
MySQL似乎删除了任何额外的逗号@@sql_mode,因此您无需担心它们.
不要用SELECT *; 只选择您需要的列.