0
여러 개의 방을 동시에 실행할 수있는 게임을 만들고 있습니다. 나는 모든 객실에 관한 정보를 담고있는 MySQL 테이블 "rooms"을 가지고있다.PHP - 데이터베이스의 일부 필드 만 반복하는 모범 사례
이 테이블의 필드에는 "id", 방의 숫자 ID 및 "user1"에서 "user6"까지 방의 사용자의 숫자 ID가 포함됩니다.
//query() is just a function which implements mysqli::query with logging,
// error handling, etc. It uses the same connection on each call so
// there is no overhead of opening a new connection.
$q = query("SELECT id,some_other_fields,user1,user2,user3,...,user6 FROM rooms");
while($r = $q->fetch_assoc()){
//some stuff here
foreach(array($r['user1'],$r['user2'],...,$r['user6']) as $user)
stuff((int)$user);
//some more stuff
}
당신이 볼 수 있듯이, 내가 명시 적으로에 대한 배열을해야 :
한 페이지에, 나는 모든 객실에 대한 이러한 정보를 몇 가지 물건을 할 필요가, 내 현재 코드는 뭔가처럼 사용자가 그것을 반복합니다.
더 좋은 방법이 있습니까?
$q = query("SELECT id,some_other_fields FROM rooms");
while($r = $q->fetch_assoc()){
//some stuff here
foreach(query("SELECT user1,user2,user3,...,user6 FROM rooms WHERE id=".$r['id'])->fetch_assoc() as $user)
stuff((int)$user);
//some more stuff
}
객실의 수는 일반적으로 약 10 ~ 20 될 경우,이 적절할 것 :
그리고이 코드를 고려하고? 쿼리를 수행하기 전에 단 한 줄의 코드를 변경하는 동안
가능한 한 적은 양의 SQL 문을 사용하는 것이 가장 이상적입니다. 사용자를 선택하는 유일한 이유가 루프를 통과하는 것이라면 ['CONCAT_WS'] (http://dev.mysql.com/doc/refman/5.0/en/string-functions.html#function_concat-ws)를 사용할 수 있습니다.)를 하나의 변수로 가져온 다음 배열로 [explose] (http://www.php.net/manual/en/function.explode.php)합니다. – Jon
주어진 방에 항상 정확히 6 명의 사용자가 있습니까? 그것도 선수의 수에요? – FoolishSeth
최대 플레이어 수는 6이지만 항상 정확하게 6 일 필요는 없습니다. "0"은 "사용자 없음"을 나타냅니다. (그리고'물건들 '이 이것에 적절하게 반응 할 것입니다) – TwiNight