Php MySQL选择变量不在行中的位置
我正在尝试使用MySQL查询来提取特定的行,而不需要PHP的帮助 好,, 我想选择一行,其中变量不在特定行中,但问题是Php MySQL选择变量不在行中的位置,php,mysql,arrays,Php,Mysql,Arrays,我正在尝试使用MySQL查询来提取特定的行,而不需要PHP的帮助 好,, 我想选择一行,其中变量不在特定行中,但问题是 $blocked_user = "aaron"; 在MySQL中 +----------+-----------------------+ | id | blocked | +----------+-----------------------+ | 1 | aaron,john | 我希望在选择和
$blocked_user = "aaron";
在MySQL中
+----------+-----------------------+
| id | blocked |
+----------+-----------------------+
| 1 | aaron,john |
我希望在选择和处理john时跳过aaron
一个错误的例子:
SELECT * FROM table WHERE $blocked_user NOT IN blocked
我所做的是使用php explode函数获取被阻止的内容并将其分离,然后使用in_数组,如果要确认其不存在:
if(in_array($blocked_user, explode($row['blocked'])){
exit;
}
但是现在我想摆脱这个问题,用一个查询来完成它,它是如何完成的?可能有一些高级的regex-MySQL,但是问题更为严重。您的桌子应该看起来更像这样:
| id | blocked |
----------------
| 1 | aaron |
| 1 | john |
其中,当然id不是主键类型
然后你可以这样做:
SELECT * FROM table WHERE id = 1 AND blocked NOT IN ('aaron')
根据您的编辑,如果您有第二个表,我们将其称为数据
您可能可以使用某种高级regexmysql,但问题更为严重。您的桌子应该看起来更像这样:
| id | blocked |
----------------
| 1 | aaron |
| 1 | john |
其中,当然id不是主键类型
然后你可以这样做:
SELECT * FROM table WHERE id = 1 AND blocked NOT IN ('aaron')
根据您的编辑,如果您有第二个表,我们将其称为数据
你可以试试
$sql = "SELECT * FROM table WHERE blocked NOT LIKE '%{$blocked_user}%'";
你可以试试
$sql = "SELECT * FROM table WHERE blocked NOT LIKE '%{$blocked_user}%'";
实际上,您应该将每个CSV值放在不同的行中,可能放在一个被阻止的表中,但您可以做的是:
SELECT *
FROM tbl
WHERE FIND_IN_SET('$blocked_user', blocked) = 0
如果$blocked_用户包含在blocked列的CSV列表中,则不会选择该行
实际上,您应该将每个CSV值放在不同的行中,可能放在一个被阻止的表中,但您可以做的是:
SELECT *
FROM tbl
WHERE FIND_IN_SET('$blocked_user', blocked) = 0
如果$blocked_用户包含在blocked列的CSV列表中,则不会选择该行
我认为您正在寻找的是一个左外连接,但这需要将被阻止的名称存储在单独的行中 例如:
+----------+-----------------------+
| id | blocked |
+----------+-----------------------+
| 1 | aaron |
| 2 | john |
然后可以在用户表上执行左外部联接,如下所示:
SELECT * FROM users AS u
LEFT JOIN blocked as b
ON b.blocked = u.username
WHERE b.blocked IS NULL
我认为您正在寻找的是一个左外连接,但这需要将被阻止的名称存储在单独的行中 例如:
+----------+-----------------------+
| id | blocked |
+----------+-----------------------+
| 1 | aaron |
| 2 | john |
然后可以在用户表上执行左外部联接,如下所示:
SELECT * FROM users AS u
LEFT JOIN blocked as b
ON b.blocked = u.username
WHERE b.blocked IS NULL
您的阻止字段是否实际存储逗号分隔的值?在db字段中内爆字符串不是一个好主意。您应该将每个用户存储在不同的数据库中row@JorgeZapata不,它实际上是一个会话用户名,但只是显示在example@Osa-您能否在问题中添加一个完整的示例?我很难弄清楚你到底想要什么-你只是想要“亚伦,约翰”字符串中的“约翰”部分吗?@user1538127到那时他们可能已经超过1000了,我做不到,我可以这样做,以防有其他想法做同样的事情,但在一行中,您的阻止字段是否实际存储逗号分隔的值?在db字段中内爆字符串不是一个好主意。您应该将每个用户存储在不同的数据库中row@JorgeZapata不,它实际上是一个会话用户名,但只是显示在example@Osa-您能否在问题中添加一个完整的示例?我很难弄清楚你到底想要什么-你只是想要“亚伦,约翰”字符串中的“约翰”部分吗?@user1538127到那时他们可能已经超过1000了,我做不到,我可以,以防有任何其他想法来做同样的事情,但在一行中,ID 1是一行,我想阻止特定的人aaron选择它,所以你有一个单独的表,你将他们联系起来,对吗?id 1是一行,我想阻止特定的人aaron选择它,所以你有一个单独的表,你将他们联系起来,对吗?