2012-04-15 79 views
2

所以我这样做是为了找回我的整个表:如何在MySQL查询结果中查找特定行?

$result = mysql_query('SELECT * FROM mytable'); 

然后,在我的PHP页面的另一部分,我做的另一个查询(特定行):

$result2 = mysql_query('SELECT * FROM mytable WHERE id = ' . $id); 
$row = mysql_fetch_array($result2); 

所以,我正在执行两个querys。但是,我真的不必这么做,是吗?我的意思是,我在第二个查询中检索的行已存在于$result(我的第一个查询的结果)中,因为它包含了我的整个表。

因此,我不想做第二个查询,我想直接从$result中提取所需的行(同时保持$result本身的机制)。

我该怎么做?


好了,这是怎么了,我实现它:

function getRowById ($result, $id) 
{ 
    while ($row = mysql_fetch_array($result)) { 
     if ($row['id'] == $id) { 
      mysql_data_seek($result, 0); 
      return $row; 
     } 
    } 
} 

回答

2

你可以通过结果集,找到行,然后重新设置内部指针回到第一排的循环:

while($row = mysql_fetch_array($result)) 
{ 
    if($row['id'] == $id) 
    { 
    //row found, do processing ... 
    //reset pointer and break from loop 
    if(!mysql_data_seek($result, 0)) 
     //handle error 
    break; 
    } 
} 
+0

似乎为我工作。我用我的新代码更新了我的问题。而不是打破,我返回行。没关系,对吧? – 2012-04-15 17:08:12

+0

是的,做同样的事情(如果你使用它在一个功能没有任何进一步的循环) – 2012-04-15 17:12:57

+0

是的,这应该工作得很好 – 2012-04-15 17:35:46

4

第一查询缓存后的数据:

$rows = array(); 
while($row=mysql_fetch_array($result) { 
    $rows[$row[0]] = $row; 
} 

那么简单的使用访问数据:

$row = $rows[$id]; 

id需要是第一个专栏为此工作。

+0

但是,这将在我的'$ result'中移动该指针,对吧? – 2012-04-15 17:00:28

+0

是的,您可以在第一次查询之后进行处理。 (在同一个循环内) – 2012-04-15 17:02:39

1

假设你在为了你指定在这里做它,你已经知道第一次迭代时你想找到的id,你可以保存这个值。

所以,在某处你的脚本,你这样做

while ($row = mysql_fetch_array($result)) { 
    // process data 
} 

在这种循环中,你可以只检查您的ID,并保存供以后使用。

while ($row = mysql_fetch_array($result)) { 
     // process data 
     if ($row['id'] == $id) $importantid = $row; 
    } 

这将是最快的方法,如果你只需要得到一个排出来,因为你只需要遍历$result一次。

+0

是的,这将是最快的方法。我还没有实现我的网页中显示所有数据的部分,所以我还没有遍历我的'$ result'。但是一旦我完成了,我会考虑将这两个迭代合并为一个。 – 2012-04-15 17:36:52