【问题标题】:Cannot select items in mysql with "WHERE s_id IN ($array)"无法使用“WHERE s_id IN ($array)”在 mysql 中选择项目
【发布时间】:2012-10-16 01:48:15
【问题描述】:

这是我的问题,我有两张表,一张是连接(一列 - 团队 id,其他 - 人员 id)我从一个确切的团队中找到所有人员 id(这里是 't1')并把它放入数组,这里一切正常。

$id1 = mysql_query("SELECT id FROM connections WHERE team='t1'");
$id11 = array();
while(($row =  mysql_fetch_assoc($id1))) {
    $id11[] = $row;
}

echo "";
print_r($id11);
echo "";

直到这里一切正常,在 print_r 中我看到了我想看到的数组项。但从这里 [粪便] 发生。我想从“persons”表中选择人名,该表具有前一个数组($id11)中的 id。最后我得到一个空数组。

$kom1 = mysql_query("SELECT name FROM persons WHERE s_id IN('".join("','", $id11)."')");


//$kom1 = mysql_query("SELECT name FROM persons WHERE s_id IN(".implode(',',$id11).')'); //this one doesnt work too
$kom11 = array();
while(($row1 =  mysql_fetch_assoc($kom1))) {
$kom11[] = $row1;
}

echo "";
print_r($kom11);
echo "";

什么都试过了,请帮帮我,谢谢。

【问题讨论】:

  • 回显出来的 SQL 是什么样的?直接在数据库中运行是否有效?
  • 保持语言简洁。绝对没有理由在这里使用这种措辞。另外,您没有错误处理-您确定查询正确执行吗? $row1 = mysql_query(...) or die(mysql_error());。修复你的变量名。 $kom1$kom11 只会在以后导致严重的混乱。

标签: php mysql arrays select where


【解决方案1】:

在第二个查询中直接使用子查询:

SELECT * FROM blah WHERE boing IN (SELECT id FROM blah2 WHERE team=1337)

应该在每个不那么花哨的数据库中工作

【讨论】:

  • 谢谢你,你的方式和解释是最好的!
【解决方案2】:

试试这个:

$id11[] = $row['id'];

【讨论】:

  • 鉴于 OP 甚至没有在查询中选择 id 字段,这是完全错误的。
  • @MarcB - 这是正确的;他指的是第四行代码
  • SELECT id FROM connections WHERE team='t1 - 盲人@Mark B
  • 你是对的。我很抱歉。我在看第二个代码块。
  • SELECT P.name FROM persons p, connections c WHERE p.s_id = c.id and c.team = 't1'
【解决方案3】:

我的问题是:你为什么要先用两个查询来做这个?

你可以简单地使用:

select p.name from persons p, connections c
where c.team = 't1'
and c.id = p.s_id

(或等效的显式连接)。

【讨论】:

  • 一针见血,减去使用隐式语法。
猜你喜欢
  • 2014-11-16
  • 1970-01-01
  • 2011-01-23
  • 2012-03-17
  • 2013-03-20
  • 2014-11-12
  • 1970-01-01
  • 2013-01-03
相关资源
最近更新 更多