选择列具有特定ID的所有行

时间:2013-09-15 13:04:47

标签: mysql sql find-in-set

所以我有一个设计糟糕的数据库(我认为),我无法改变。它是一个类似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代码是否有可能在重放中查询错误?

2 个答案:

答案 0 :(得分:5)

您的表架构状况不佳。你应该正确地将其正常化。但要回答您的问题,您仍然可以使用JOINFIND_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

我的首选设计是

用户表

  • UserID(PK)
  • 用户名

关注表

  • UserID(FK) - 也是具有FollowID的PK
  • FollowID(FK)

答案 1 :(得分:1)

您可能正在寻找FIND_IN_SET()

SELECT  userid, username
FROM    tableName
WHERE FIND_IN_SET('1', following);

<强> SAMPLE FIDDLE