【问题标题】:SELECT limiting to only results based on a CSV list from a separate tableSELECT 限制为仅基于来自单独表的 CSV 列表的结果
【发布时间】:2010-02-02 06:19:33
【问题描述】:

所以我在一张表中有一个 CSV 列表。 (例如:1,3,19) 我想从另一个表中搜索所有用户名,其中 id 与其中任何一个匹配。

我觉得我应该能够做到:

<?
$query = "SELECT player_ids FROM cast_list WHERE game='".$gameid."' ";
$result = mysql_query($query) or die(mysql_error());
$playerquery = "SELECT username,id FROM players WHERE id IN (".$result.") ORDER BY username;
$player_result = mysql_query($playerquery) or die(mysql_error());
echo "<ul>";
while ($row = mysql_fetch_array($player_result) ) {
  echo "<li>".$row['username']."</li>";
}
echo "</ul>";
?>

但我无法让它工作。我做错了什么?

【问题讨论】:

  • 您的示例不起作用,因为您需要使用 mysql_fetch_* 方法之一从 $result 资源中获取 player_ids 列的值。

标签: php mysql multiple-tables mutual-exclusion


【解决方案1】:

您也可以使用subquery(会更快):

$playerquery = "SELECT username,id 
                FROM players 
                WHERE id IN (SELECT player_ids FROM cast_list WHERE game='".$gameid."') 
                ORDER BY username";

顺便说一句,如果 game 是一个整数字段,您没有在值周围加上引号 (' ')。

【讨论】:

  • 我相信 OP 表明 player_ids 是玩家 ID 的 CSV。所以这行不通。
【解决方案2】:

思路是对的,但是需要将$result转移到实际的字符串数组中:

$game_ids = array();
while ($row = mysql_fetch_array($result) ) {
 $game_ids[] = .$row[1];
}

现在使用implode 将数组转换为用逗号分隔的值:

$playerquery = "SELECT username,id FROM players WHERE id IN (" . implode(",",$result) . ") ORDER BY username;

【讨论】:

  • implode(",",$game_ids)
猜你喜欢
  • 2012-06-02
  • 1970-01-01
  • 1970-01-01
  • 2019-11-10
  • 1970-01-01
  • 2019-09-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多