Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/237.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php MYSQL-从获取的数组中选择特定值_Php_Mysql_Arrays - Fatal编程技术网

Php MYSQL-从获取的数组中选择特定值

Php MYSQL-从获取的数组中选择特定值,php,mysql,arrays,Php,Mysql,Arrays,我有一个小问题,因为我对所有这些东西都很陌生,所以我在谷歌上搜索不成功,因为我不知道我要找什么的确切定义 我有一个非常简单的数据库,我通过以下方式获取所有行: while($row = mysql_fetch_array($result)){ echo $row['id']. " - ". $row['name']; echo "<br />"; } 有可能吗?或者我必须编写另一个mysql查询,比如SELECT。。其中id=2以获取第二行中的名称值 我想说的是:

我有一个小问题,因为我对所有这些东西都很陌生,所以我在谷歌上搜索不成功,因为我不知道我要找什么的确切定义

我有一个非常简单的数据库,我通过以下方式获取所有行:

while($row = mysql_fetch_array($result)){
    echo $row['id']. " - ". $row['name'];
    echo "<br />";
}
有可能吗?或者我必须编写另一个mysql查询,比如SELECT。。其中id=2以获取第二行中的名称值

我想说的是:


-使用while循环从数据库获取所有数据,但不在我的页面上单独显示某些结果。例如,第二行的echoname和第一行的echoid等等。

是的,理想情况下,您必须编写另一个sql查询来过滤结果。如果你有:

$counter = 0;
while($row = mysql_fetch_array($result)){
    $counter++;

    if($counter == 2){
        echo $row['id']. " - ". $row['name'];
        echo "<br />";
    }
}
SELECT * FROM Employes
然后,您可以使用以下方法对其进行过滤:

SELECT * FROM Employes WHERE Name="Paul";
如果您希望每个名称都以p开头,可以通过以下方式实现:

SELECT * FROM Employes WHERE Name LIKE "P%";

使用sql查询筛选数据的主要原因是,MySQL/MSSQL/Oracle/etc等数据库管理器系统经过高度优化,比PHP中的服务器端条件块快得多。

此While循环将自动从数据库中获取所有记录。如果要获取任何其他字段,则只需需要用于此操作。

取决于您要执行的操作。mysql_fetch_数组获取当前资源指针指向的行。这意味着您没有$row['name'][2];完全在while循环的每次迭代中,查询中的所有列都位于$row数组中,而不是一次从数组中的查询中获取所有行。如果只需要这一行,那么是-向查询中添加WHERE子句,如果不需要其他行,则不检索它们。如果您需要所有行,但在获得第二行时希望执行一些特殊操作,那么您必须添加一个计数器来检查当前正在使用的行。即:

$count = 0;
while($row = mysql_fetch_array($result)){
    if(++$count == 2)
    {
        //do stuff
    }
}

如果希望能够在一个循环中使用两个连续的结果,可以存储第一个循环的结果,然后循环

$initial = true;
$storedId = '';

while($row = mysql_fetch_array($result)) {

  $storedId = $row['id'];

  if($initial) {

    $initial = false;
    continue;
  }

  echo $storedId . $row['name'];
}

但是,这只适用于连续的情况。请原谅语法错误,我已经很长时间没有用PHP编程了…

如果您希望使用完整的结果集而不是只循环一次,您可以将整个结果集放入一个数组:

$row = array();

while( $row[] = mysql_fetch_array( $result ) );

现在,您可以使用第一个索引访问单个记录,例如,第二行的名称字段位于$row[2]['name']中

如果始终需要第二行,则无论数据库中有多少行,都应修改查询,因此:

SELECT * FROM theTable LIMIT 1, 1;

请参阅:

我使用了答案中的代码,并对其进行了轻微修改。我想我会分享

$result = mysql_query( "SELECT name FROM category;", db_connect() );
$myrow = array();
while ($myrow[]  = mysql_fetch_array( $result, MYSQLI_ASSOC )) {}
$num = mysql_num_rows($result);
示例用法

echo "You're viewing " . $myrow[$view_cat]['name'] . "from a total of " . $num;

您是只想要第二行,还是想要对循环中的第二行进行操作?您想做什么?如果您能提供更多的背景信息,可能会有更好的解决方案。我编辑了我的问题,试图解释我想要实现的目标。我希望它可以理解。您想要查询返回的第二行还是id=2的行?查询基本上应该返回所有行,但我不想单独使用它们,如果可能的话,正如我在编辑中试图解释的那样。我知道我可以通过编写一个新的mysql查询来做到这一点,但我认为这可能不是最好的解决方案。。其中,如果id从0开始,则名称(如P%)将$counter的初始值设置为-1。您还可以更改条件以检查$row['id']值。事实上,有很多选择:这与cidenix提出的基本相同,两者都会起作用,或者我误解了吗?不,这不一样。取决于你想做什么@cidenix的代码正在检查查询$row['id']==2返回的id列的值。我只是增加一个计数器,这意味着当你到达返回的第二行时,不管它的值是多少,你都会进入if。这似乎正是我想要的:非常感谢!很抱歉问另一个愚蠢的问题,但我应该把你的代码放在哪里?我在我现有的循环和外部尝试了它,但我一直得到未定义的偏移量:2。无需担心!我想出来了。我忘了计数从0开始。。。但出于某种奇怪的原因,行[0]给出了第二行,行[1]仍然给出了一个未定义的偏移量错误,虽然我的数据库中有两行,但我想这可能与我代码中的另一个错误有关。我只是想说这也很好。简单但有效,但一旦我发现我做错了什么,我会接受Juhana的答案:
$result = mysql_query( "SELECT name FROM category;", db_connect() );
$myrow = array();
while ($myrow[]  = mysql_fetch_array( $result, MYSQLI_ASSOC )) {}
$num = mysql_num_rows($result);
echo "You're viewing " . $myrow[$view_cat]['name'] . "from a total of " . $num;