IN子句只返回1行

问题描述:

我有我的链接表中的链接和标题的列表,我试图用一个IN子句返回它们,但查询永远不会返回多于一行,总是最小行的集合。IN子句只返回1行

SELECT title, url 
FROM opsx_links 
WHERE linkid IN('61','60','10','24','15','20','30','47') 

这将返回所有8个环节,因为它们都存在,但只返回信息的项目10.如果我删除了10项形式的列表,它就会只返回第15项等。

我会失去它还是什么?

我搜索了我的屁股并找不到任何有此问题的人。

谢谢。

-V

确定是我不好,这里的PHP代码

public function getLinks ($data) { 
    $query = $this->db->Fetch ("SELECT title, url 
      FROM {$this->prefix}links WHERE linkid IN(" . $data . ")"); 
    $result = $this->db->FetchObject ($query); 

    foreach ($result as $key => $value): 

     $result->$key = $this->replace_strings ($value); 

    endforeach; 

    $this->db->Free ($query); 

    return $result; 
} 

每jeron

$res = array(); 

while ($result = $this->db->FetchObject ($query)): 

    $res['title'] = $result->title; 
    $res['url'] = $result->url; 

endwhile; 

现在只返回的第一行,而不是最小行尝试这样做。

什么在世界上?

经过多次试验和错误以及所有专家的帮助之后,以下是答案。

public function getLinks ($data) { 
    $query = $this->db->Fetch ("SELECT title, url 
       FROM {$this->prefix}links WHERE linkid IN(" . $data . ")"); 
    $res = array(); 
    while ($results = $this->db->FetchArray ($query)): 
      $obj = new stdClass; 
      $obj->title = $results['title']; 
      $obj->url = $this->replace_strings($results['url']); 
      $res[] = $obj; 
    endwhile; 

    $this->db->Free ($query); 

    return (object)$res; 
} 

感谢您的帮助。

+0

什么的linkID的数据类型? – 2012-04-03 01:46:20

+9

显示您的PHP代码。我敢打赌,当你应该在循环中调用它时,只需一次调用'mysql_fetch _ *()'。 – 2012-04-03 01:46:24

+0

您是否尝试过使用谓词选择count(*)? – dldnh 2012-04-03 01:54:57

编辑:您只得到从结果一个结果集:

$result = $this->db->FetchObject ($query); 

应该是这样的:

$my_results = array(); 
while ($result = $this->db->FetchObject ($query)) 
{ 
    // make a new/clone the object, add it to the array and do the processing 
} 
return $my_results; 
+0

@jeron它应该被覆盖,它会在## VARIABLE ##上替换每个链接的常量。另外它是一个不是数组的对象。 – 2012-04-03 02:29:03

+0

@Vince Kronlein对不起,我没有仔细阅读,你需要调用'$ result = $ this-> db-> FetchObject($ query);'在循环中,我会更新我的答案。 – jeroen 2012-04-03 02:31:15

+0

仍然没有爱。 我试着将代码添加到问题中,它仍然只返回一行,但现在只是第一行。 – 2012-04-03 02:47:34