【问题标题】:How to mysqli_fetch_row while using mysqli_multi_query如何在使用 mysqli_multi_query 时获取 mysqli_fetch_row
【发布时间】:2017-12-19 03:38:36
【问题描述】:

我正在尝试获取有关某个特定人员的最新信息,并且我正在使用类似的查询

SELECT * FROM Table WHERE Name LIKE 'Peter' ORDER BY ID DESC LIMIT 1

SELECT * FROM Table WHERE Name LIKE 'Mary' ORDER BY ID DESC LIMIT 1

因为每天在表中会在更新的瞬间为不同的人插入新数据(供记录参考),所以我想通过“ORDER BY ID DESC LIMIT 1”打印出几个人的最新信息

我尝试用“mysqli_multi_query”和“mysqli_fetch_row”打印出来

喜欢

    $con=mysqli_connect($localhost,$username,$password,'Table');

    $sql = "SELECT * FROM Table WHERE Name LIKE 'Peter' ORDER BY ID 
    DESC LIMIT 1 ";
    $sql .= "SELECT * FROM Table WHERE Name LIKE 'Mary' ORDER BY ID 
    DESC LIMIT 1";

    // Execute multi query
if (mysqli_multi_query($con,$sql))
{
  do
    {
    // Store first result set
    if ($result=mysqli_store_result($con)) {
      // Fetch one and one row
      while ($row=mysqli_fetch_row($result))
        {
            echo '<tr>'; // printing table row
            echo '<td>'.$row[0].'</td>';
            echo '<td>'.$row[1].'</td>';
            echo '<td>'.$row[2].'</td>';
            echo '<td>'.$row[3].'</td>';
            echo '<td>'.$row[4].'</td>';
            echo '<td>'.$row[5].'</td>';
            echo '<td>'.$row[6].'</td>';
            echo '<td>'.$row[7].'</td>';
            echo '<td>'.$row[8].'</td>';
            echo '<td>'.$row[9].'</td>';
            echo '<td>'.$row[10].'</td>';
            echo '<td>'.$row[11].'</td>';
            echo '<td>'.$row[12].'</td>';
            echo '<td>'.$row[13].'</td>';
            echo '<td>'.$row[14].'</td>';
            echo'</tr>'; // closing table row
        }
      // Free result set
      mysqli_free_result($result);
      }
    }
  while (mysqli_next_result($con));
}

mysqli_close($con);

?>

在结果页面中,它不显示任何错误消息,但不打印任何结果。 对各个查询进行了测试。

请指教,非常感谢

有没有其他方法可以保持查询简单,所以不需要使用mysqli_multi_query?

【问题讨论】:

标签: php mysql mysqli-multi-query


【解决方案1】:

最佳实践表明,对于任何任务,您都应始终尽量减少对数据库的调用次数。

因此,JOIN 查询是合适的。

SELECT A.* FROM test A INNER JOIN (SELECT name, MAX(id) AS id FROM test GROUP BY name) B ON A.name=B.name AND A.id=B.id WHERE A.name IN ('Peter','Mary')

这将在单个结果集中的一个查询中返回所需的行,然后可以对其进行迭代和显示。

这是一个 sqlfiddle 演示:http://sqlfiddle.com/#!9/2ff063/3

附:在搜索非变量值时不要使用 LIKE。我的意思是,只有在逻辑上需要_% 时才使用它。

【讨论】:

  • 如果您在执行此操作时有任何问题或困难,请提出,但不要在质量上妥协。我会更好地格式化我的答案,但我是通过手机发帖的。
  • @NDSAC 您的问题似乎已被放弃。我的回答能满足你的问题吗?你需要我澄清一下吗?你知道如何接受答案吗?
  • 感谢 mickmackusa ,抱歉我没有回复你,因为 Ivan86 给了我一个解决方案并且它有效,然后我没有注意到你的回答。对不起,我是编码新手,所以我可能不了解这里的文化。
【解决方案2】:

这应该适合你:

$con = mysqli_connect($localhost,$username,$password,'Table');


// Make a simple function
function personInfo($con, $sql)
{
    $result = mysqli_query($con, $sql);
    if(mysqli_num_rows($result) > 0)
    {
        while($row = mysqli_fetch_array($result))
        {
            echo '<table>
                  <tr>';
            for($i=0; $i < count($row); $i++) echo '<td>'.$row[$i].'</td>';
            echo '</tr>
                  </table>';
        }
    }
}


$sql1 = "SELECT * FROM Table WHERE Name='Peter' ORDER BY ID DESC LIMIT 1 ";
$sql2 = "SELECT * FROM Table WHERE Name='Mary' ORDER BY ID DESC LIMIT 1";


// Simply call the function
personInfo($con, $sql1);
personInfo($con, $sql2);

【讨论】:

  • 谢谢伊万,但我只能打印一个人的数据,我怎么能打印另一个人甚至更多的人信息呢?
  • 对不起,我错过了你的最后一条消息,我刚刚标记了你的答案
  • 谢谢,很高兴能够提供帮助。我鼓励您看一下@mickmackusa 的答案,因为他在使用INNER JOIN 时有一个很好的观点。除了上面的$sql1$sql2,您只需制作一个$sql。上面的所有内容都将保持不变并且可以正常工作,您只需将两个函数调用替换为一个。为此,我会赞成他的回答,因为它会提供性能升级,一旦你的桌子变大一点,就会感觉到这种升级。和平
猜你喜欢
  • 2018-10-22
  • 1970-01-01
  • 2016-10-21
  • 1970-01-01
  • 2013-12-14
  • 1970-01-01
  • 2018-07-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多