我有两个表:
对话参与者
id | conversation_id | user_id
int(11) | int(11) | int(11)
用户
id | username | ....
int(11) | varchar(20)| ....
我正在尝试选择用户名中具有特定字符串的所有用户,这些用户(尚未)尚未参与特定对话。目前我有两个 SQL 查询:
SELECT user_id FROM conversation_participants WHERE conversation_id=?
和
SELECT id, username from users WHERE username LIKE '%%%{$_GET['q']}%%' ORDER BY id DESC LIMIT 10
并删除第二个查询中与第一个查询具有相同 user_id 的所有结果。有没有办法将这两个查询合并为一个?
提前谢谢
最佳答案
SELECT id, username from users
WHERE username LIKE '%%%{$_GET['q']}%%'
and username not in
(
SELECT user_id FROM conversation_participants
WHERE conversation_id=users.conversation_id
)
ORDER BY id DESC LIMIT 10
不要构建连接字符串的 sql 语句。您应该使用某种实用方法来清理您的输入。您的语句容易受到sql注入(inject)攻击。
PHP 有几个用于此目的的函数。查看mysql_real_escape_string
关于php - 是否可以在一个 MySQL 查询中完成此操作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7966258/