首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在php数组中搜索元素

问在php数组中搜索元素
EN

Stack Overflow用户
提问于 2011-12-15 00:36:14
回答 3查看 112关注 0票数 0

我有

一个名为“"membersRooms"”的用户表名为“”

  • 房间表名为“

”

  • 一个将用户id与房间id相关联的表

我应该编写一个循环,为每个拥有所有房间的用户打印一个下拉列表,但是这会将属性"selected“添加到与用户关联的房间中。

这个循环怎么了?

代码语言:javascript
复制
$members = mysql_query("SELECT * FROM members ");
$rooms = mysql_query("SELECT * FROM rooms");

while($member = mysql_fetch_array($members)){ 
    echo("<select>");
    $roomsOfUser = mysql_query("SELECT roomID FROM membersRooms WHERE userID=".$member["id"]);
    $cuArray = mysql_fetch_array($roomsOfUser); 

    while($room = mysql_fetch_array($rooms)){
        if(in_array($room["id"],$cuArray,true))
            echo("<option selected='selected'>".$room["roomName"]."</option>");
        else
            echo("<option>".$class["roomName"]."</option>");
    }
    echo("</select>");
}
EN

回答 3

Stack Overflow用户

发布于 2011-12-15 01:34:54

为了使这一点对您来说更容易一些,您可以尝试利用数据库中的左和右连接。这将大大减少服务器负载,并且仍然允许您执行相同的功能。

我相信,如果我正确地阅读了你的数据库结构,你会想要这样的东西:

代码语言:javascript
复制
 SELECT members.id as memberID, rooms.id as roomID, rooms.roomName, membersRooms.roomID as memberRoom
 FROM members
 LEFT JOIN membersRooms
 ON members.id = membersRooms.userID
 RIGHT JOIN rooms
 ON membersRooms.roomID = rooms.id

然后,在PHP中,您应该能够跟踪您的memberID何时发生变化,当它发生变化时,启动一个新的选择。如果我没有完全错误地执行这个SQL (可能是这样的),那么生成的行应该如下所示:

代码语言:javascript
复制
memberID    |   roomID  |  roomName  |  memberRoom
    1             1          foo             1
    1             2          bar             1
    2             1          foo             1
    2             2          bar             1

因此,在循环迭代中,您将使用roomID和roomName来构建select,如果RoomID匹配memberRoom,那么您将选择该行。

票数 2
EN

Stack Overflow用户

发布于 2011-12-15 01:38:56

在运行时运行一次时$rooms查询

将这条$rooms = mysql_query("SELECT * FROM rooms");查询行放在第一步

票数 0
EN

Stack Overflow用户

发布于 2011-12-15 01:54:26

好的,所以你需要三个表的信息-成员,房间,和membersRooms。成员和membersRooms中的行排列成1:1,这样我们就可以得到两个具有1查询的行。

这种方法将减少所需的查询数量--如果您曾经看到自己在循环中查询数据库,请问问自己是否有更好的方法。

代码语言:javascript
复制
$member_query = mysql_query("SELECT * FROM members LEFT JOIN membersRooms ON (members.id = membersRooms.userID)");

$room_query = mysql_query("SELECT * FROM rooms");
$rooms = array();
while ($room = mysql_fetch_assoc($room_query))
  $rooms[] = $room;

while ($member = mysql_fetch_assoc($member_query)) {
  echo '<select>';
  foreach($rooms as $room) {
    echo "<option value='{$room['roomID']}' ";
    if ($member['roomID'] == $room['id'])
      echo 'selected="selected"';
    echo ">{$room['roomName']}</option>";
  }
  echo '</select>';
}

值得注意的是,如果“成员:房间”是1:多的关系,那么您不需要使用第三个表来加入它们--只需向成员添加一个roomId,就可以了。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8513702

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档