php - 是否可以在一个 MySQL 查询中完成此操作?

标签 php mysql

我有两个表:

对话参与者

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/

相关文章:

javascript - 如何制作单页网站

php - 通过 PHP 获取远程 XML 文件的一部分的最有效方法是什么?

php - 尝试获取模型 codeigniter 中非对象的属性

php - MySQL选择区域

mysql - FROM_UNIXTIME 没有时区转换?

mysql - WP_Query 使用 posts_per_page 参数返回分类查询的随机 ID

php - 如何在 Windows 中无需密码将 Laravel 应用程序连接到 MySQL

php - Laravel:在 routes/api.php 或 routes/web.php 中的 AJAX 请求端点?

php - 插入 0000-00-00 00 :00:00 datetime from mysql to postgresql

mysql - 在 mysql 中使用存储过程创建更新查询