如何在MySQL查询结果中查找特定行?
所以我这样做是为了找回我的整个表:如何在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;
}
}
}
你可以通过结果集,找到行,然后重新设置内部指针回到第一排的循环:
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;
}
}
第一查询缓存后的数据:
$rows = array();
while($row=mysql_fetch_array($result) {
$rows[$row[0]] = $row;
}
那么简单的使用访问数据:
$row = $rows[$id];
id需要是第一个专栏为此工作。
但是,这将在我的'$ result'中移动该指针,对吧? – 2012-04-15 17:00:28
是的,您可以在第一次查询之后进行处理。 (在同一个循环内) – 2012-04-15 17:02:39
假设你在为了你指定在这里做它,你已经知道第一次迭代时你想找到的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
一次。
是的,这将是最快的方法。我还没有实现我的网页中显示所有数据的部分,所以我还没有遍历我的'$ result'。但是一旦我完成了,我会考虑将这两个迭代合并为一个。 – 2012-04-15 17:36:52
似乎为我工作。我用我的新代码更新了我的问题。而不是打破,我返回行。没关系,对吧? – 2012-04-15 17:08:12
是的,做同样的事情(如果你使用它在一个功能没有任何进一步的循环) – 2012-04-15 17:12:57
是的,这应该工作得很好 – 2012-04-15 17:35:46