0

我无法爆炸工作我有一个名为出席的表字段,其中多个用户 ID 用逗号 73、1、5 分隔现在我可以轻松地让用户 73 回显,但其余的需要爆炸,我希望它回显这 3 个用户的每个用户名或最终的用户名。我在想这可能是我用//注释掉的东西

参加字段是用户列表 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 结果资源。

4

3 回答 3

2

您可以通过该功能SELECT加入EventsUsers表格,只需一个即可完成所有操作。find_in_set()这样,您将获得参加每个活动的所有用户,因为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) 
");
于 2013-06-09T05:07:31.330 回答
1
$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你应该得到一个数组之后。

于 2013-06-09T03:31:22.637 回答
0

因此,如果我理解正确,您的字符串中的值以逗号分隔“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'];
}
于 2013-06-09T03:29:03.447 回答