Mysql 查询在 laravel 中无效
Mysql query isn't working in laravel
我一直在尝试检索 ser 从聊天中发送的一些消息 table。我想出了一个在 phpmyadmin 中运行良好的查询。
但是当我在 laravel 中使用相同的查询时,它不起作用。
SELECT user2,message,created_at FROM ( SELECT user2,message,created_at FROM chats WHERE user1 ='Tiffany' UNION SELECT user1,message,created_at FROM chats WHERE user2 ='Tiffany' in ( SELECT DISTINCT user2 FROM chats WHERE user1 ='Tiffany' UNION SELECT distinct user1 FROM chats WHERE user2 ='Tiffany' ) )tb2 WHERE user2 !='Tiffany' GROUP BY user2
我几乎尝试了所有方法,但还是找到了解决方案。请给我一个简短的解释,为什么上面的查询不起作用。我聊天的字段 table 是
id,user1(varchar),user2(varchar),消息,created_at(时间戳),updated_at(时间戳)
我使用了整个代码
if ($pmessage = \DB::select('select user2,message,created_at
from (select user2,message,created_at from chats where user1 ='Tiffany'
union select user1,message,created_at from chats where user2 ='Tiffany'
in ( select distinct user2 from chats where user1 ='Tiffany'
union select distinct user1 from chats where user2 ='Tiffany' ))
where user2 != 'Tiffany'
group by user2')) {
return response()->json(['pmessage' => $pmessage, 'status' => 200], 200);
} else {
return response()->json(['status' => 505], 505);
}
我的根文件夹你有文件.env 用记事本打开后你应该有这样的命令
**
APP_ENV=local
APP_DEBUG=true
APP_KEY=VTRcD5ZoIabuY9QR5Ih1QeCTTgCHQZrR
DB_HOST=localhost
DB_DATABASE=angulara
DB_USERNAME=root
DB_PASSWORD=
CACHE_DRIVER=file
SESSION_DRIVER=file
QUEUE_DRIVER=sync
REDIS_HOST=localhost
REDIS_PASSWORD=null
REDIS_PORT=6379
MAIL_DRIVER=smtp
MAIL_HOST=mailtrap.io
MAIL_PORT=2525
MAIL_USERNAME=null
MAIL_PASSWORD=null
MAIL_ENCRYPTION=null
您还必须在 config/database.php
中修改配置数据库
我认为您需要使用 DB::raw()。类似于:
$pmessage = \DB::select(\DB::raw("SELECT ..."))
此外,您需要混合引用。所以使用双引号 around 你的查询,这样你就可以在 within 你的查询中使用单引号。所以你应该使用这样的东西:
$pmessage = \DB::select( \DB::raw("Select user2,message,created_at
from (select user2,message,created_at from chats where user1 ='Tiffany'
union select user1,message,created_at from chats where user2 ='Tiffany'
in ( select distinct user2 from chats where user1 ='Tiffany'
union select distinct user1 from chats where user2 ='Tiffany' ))
where user2 != 'Tiffany'
group by user2')"));
我一直在尝试检索 ser 从聊天中发送的一些消息 table。我想出了一个在 phpmyadmin 中运行良好的查询。
但是当我在 laravel 中使用相同的查询时,它不起作用。
SELECT user2,message,created_at FROM ( SELECT user2,message,created_at FROM chats WHERE user1 ='Tiffany' UNION SELECT user1,message,created_at FROM chats WHERE user2 ='Tiffany' in ( SELECT DISTINCT user2 FROM chats WHERE user1 ='Tiffany' UNION SELECT distinct user1 FROM chats WHERE user2 ='Tiffany' ) )tb2 WHERE user2 !='Tiffany' GROUP BY user2
我几乎尝试了所有方法,但还是找到了解决方案。请给我一个简短的解释,为什么上面的查询不起作用。我聊天的字段 table 是
id,user1(varchar),user2(varchar),消息,created_at(时间戳),updated_at(时间戳)
我使用了整个代码
if ($pmessage = \DB::select('select user2,message,created_at
from (select user2,message,created_at from chats where user1 ='Tiffany'
union select user1,message,created_at from chats where user2 ='Tiffany'
in ( select distinct user2 from chats where user1 ='Tiffany'
union select distinct user1 from chats where user2 ='Tiffany' ))
where user2 != 'Tiffany'
group by user2')) {
return response()->json(['pmessage' => $pmessage, 'status' => 200], 200);
} else {
return response()->json(['status' => 505], 505);
}
我的根文件夹你有文件.env 用记事本打开后你应该有这样的命令
**
APP_ENV=local
APP_DEBUG=true
APP_KEY=VTRcD5ZoIabuY9QR5Ih1QeCTTgCHQZrR
DB_HOST=localhost
DB_DATABASE=angulara
DB_USERNAME=root
DB_PASSWORD=
CACHE_DRIVER=file
SESSION_DRIVER=file
QUEUE_DRIVER=sync
REDIS_HOST=localhost
REDIS_PASSWORD=null
REDIS_PORT=6379
MAIL_DRIVER=smtp
MAIL_HOST=mailtrap.io
MAIL_PORT=2525
MAIL_USERNAME=null
MAIL_PASSWORD=null
MAIL_ENCRYPTION=null
您还必须在 config/database.php
中修改配置数据库我认为您需要使用 DB::raw()。类似于:
$pmessage = \DB::select(\DB::raw("SELECT ..."))
此外,您需要混合引用。所以使用双引号 around 你的查询,这样你就可以在 within 你的查询中使用单引号。所以你应该使用这样的东西:
$pmessage = \DB::select( \DB::raw("Select user2,message,created_at
from (select user2,message,created_at from chats where user1 ='Tiffany'
union select user1,message,created_at from chats where user2 ='Tiffany'
in ( select distinct user2 from chats where user1 ='Tiffany'
union select distinct user1 from chats where user2 ='Tiffany' ))
where user2 != 'Tiffany'
group by user2')"));