所以我有一个设计糟糕的数据库(我认为),我无法改变。它是一个类似Twitter的应用程序,用户可以互相关注。每个用户在表中都有它的行,并且在该表中有一个名为“following”的列,表示用户正在关注的所有USERID。在该列中,有一个用昏迷分隔的USERID列表。因此,假设ID为1的用户跟随用户2和3,ID为2的用户跟随用户1,表格看起来像这样,用户3不跟随任何人。
USERID | username | following
-------------------------------------------
1 | some user | 2,3
2 | test1 | 1
3 | test2 |
问题是如何显示用户1正在关注的所有用户?
编辑1
491243无效的代码,在这里张贴,也许我在php中错过了一些东西
$USERID = $_GET['userid'];//this has a value, so not the problem here
$sql_select = "SELECT B.USERID FROM users A INNER JOIN users B ON FIND_IN_SET(B.USERID, B.following) > 0 WHERE B.USERID = '$USERID'";
$result_select = mysqli_query($link,$sql_select);
while($record = mysqli_fetch_array($result_select))
{
$following = $record['USERID'];
var_dump($following); //result is nothing, not even NULL
}
编辑2 只是为了理智检查我做了这个:
$sql_select = "SELECT USERID FROM users WHERE USERID = '1'";
$result_select = mysqli_query($link,$sql_select);
while($record = mysqli_fetch_array($result_select))
{
$following = $record['USERID'];
var_dump($following); //result is 1, like it`s supposed to be
}
我的PHP代码是否有可能在重放中查询错误?
答案 0 :(得分:5)
您的表架构状况不佳。你应该正确地将其正常化。但要回答您的问题,您仍然可以使用JOIN
和FIND_IN_SET
SELECT b.userid, b.username
FROM tableName a
INNER JOIN tableName b
ON FIND_IN_SET(b.userID, a.following) > 0
WHERE a.userID = 1
我的首选设计是
用户表
关注表
答案 1 :(得分:1)
您可能正在寻找FIND_IN_SET()
SELECT userid, username
FROM tableName
WHERE FIND_IN_SET('1', following);
<强> SAMPLE FIDDLE 强>