【问题标题】:Explode multiple user Ids分解多个用户 ID
【发布时间】:2013-06-09 03:23:40
【问题描述】:

我在开始工作时遇到问题 我有一个名为出席的表字段,其中有多个用户 ID,用逗号 73、1、5 分隔现在我可以轻松地让用户 73 回显,但其余的需要爆炸,我想要它回显这 3 个用户的每个用户名或最终的用户名。我在想这可能类似于我用 //

注释掉的内容

Attending Field 是用户列表 http://imageshack.us/a/img38/1425/eventsne.jpg

一旦我的用户名在头像和桌子上工作不好,就尝试像这样回声 http://imageshack.us/a/img819/8210/events2d.jpg

$Attending1 = array(); 
$Attending1 = mysql_query("SELECT * FROM Events, Users WHERE Events.Attending = Users.UserId");

//$AttendingUserIds = $Attending1['Attending'];
//$AttendingExploded = explode(",", $AttendingUserIds);

//$Attending3 = array();
//$Attending3 = mysql_query("SELECT * FROM Events, Users WHERE $AttendingExploded = Users.UserId");


while ($Attending2 = mysql_fetch_array($Attending1)) {
    echo $Attending2['username'];
}

刚刚尝试了 KyleK 的第三个建议

$Attending1 = array();
$Attending1 = mysql_query("SELECT * FROM Events, Users WHERE Events.Attending = Users.UserId");

$AttendingUserIds = $Attending1['Attending'];
//$AttendingExploded = explode(",", $AttendingUserIds);

$Attending3 = array();
$Attending3 = mysql_query("SELECT * FROM Events, Users WHERE Users.UserId IN ($AttendingUserIds)");

它给了我警告:mysql_fetch_array():提供的参数不是 While 开始的有效 MySQL 结果资源。

【问题讨论】:

  • 哦,我想我在第一个答案中误解了你.....你有一行,并且 ID 来自逗号分隔列表中的数据库......然后你想查询每个逗号分隔值列表的数据库?

标签: php mysql


【解决方案1】:

您可以通过find_in_set() 函数加入EventsUsers 表,只需一个SELECT 即可完成所有操作。这样,您将获得参加每个活动的所有用户,因为find_in_set() 将在作为第二个参数提供的 CSV 字符串中查找第一个参数。您可能还想添加WHERE 来过滤特定事件。并且不要忘记仅将 * 替换为您需要的字段,以避免不必要的数据流量:

$Attending = array(); 
$Attending = mysql_query("
  SELECT * 
  FROM Events e
  INNER JOIN Users u ON find_in_set(u.UserId, e.Attending) 
");

【讨论】:

  • 是的,它成功了,我试图给你投票,但它说我需要 15 声望。
  • 没问题!很高兴能够提供帮助!
【解决方案2】:
$Attending1 = mysql_query("SELECT * FROM Events, Users WHERE Events.Attending = Users.UserId");
   while ($Attending2 = mysql_fetch_assoc($Attending1)) {
    $arr[] = $Attending2['username'];
}

mysql_query 不会给你一个数组,fetch_array(或fetch_assoc)会。

它的结果会是这样的:$arr[0]['username'], $arr[1]['username'], $arr[2]['username']等。我不知道你想怎么“爆炸”所以我无法回答,但是在fetch_assoc之后你应该得到一个数组。

【讨论】:

    【解决方案3】:

    所以,如果我理解正确,您在字符串中的值是用逗号分隔的“73、3、5”。 因此,只需使用 WHERE IN

    你从数据库中得到的字符串,但是你会得到它......

    $stringofids = "73,3,3";//You will obviously retrieve these from database
    

    然后将该字符串传递给另一个查询,使用 WHERE IN 语句... 这将返回一个包含所有参与的用户的数组。

    $AttendingUsers = mysql_query("SELECT * FROM Events, Users WHERE Users.UserId IN ($stringofids)");
    
    while ($Attending = mysql_fetch_array($AttendingUsers)) {
    echo $Attending['username'];
    }
    

    【讨论】:

    猜你喜欢
    • 2011-01-14
    • 2018-03-29
    • 1970-01-01
    • 1970-01-01
    • 2019-11-27
    • 1970-01-01
    • 2013-11-15
    • 2020-09-14
    • 1970-01-01
    相关资源
    最近更新 更多