【问题标题】:Echo the latest MySQL record in for loop在 for 循环中回显最新的 MySQL 记录
【发布时间】:2015-07-20 04:38:33
【问题描述】:

我使用 PDO 连接数据库并从表中提取记录。

我只想提取最新的记录,但是当我运行以下代码时不回显任何内容..

SELECT * FROM uds ORDER BY price DESC LIMIT 1 

我的php代码

<?php

            $params =null; //or any params
            $mrkfPDO =  new PDO('mysql:host=localhost;dbname=usd', 'root', '',
                array(
                    PDO::ATTR_PERSISTENT => true,
                    PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8"
                )
            );
            $mrkfStatement = $mrkfPDO->prepare("SELECT * FROM `uds` ORDER BY price DESC LIMIT 1 ");
            $mrkfStatement->execute($params);
            $pays = $mrkfStatement->fetchAll(PDO::FETCH_ASSOC);


            for($i=1; $i<count($pays); $i++) // see the change
            {

                $color = 'black';

                if($pays[$i]['price'] < $pays[($i-1)]['price'])
                    $color="red";
                elseif($pays[$i]['price'] > $pays[($i-1)]['price'])
                    $color = 'green';
                else
                    $color = 'black';

                echo "<tr>

                        <td>
                            <span style='color: $color'>"
                              .$pays[$i]['price'].
                            "</span>
                        </td>
                      </tr>";  
            }


            ?>

描述代码

使用 curl 每 1 分钟访问另一个网站并获取美元价格,然后将其插入数据库...

我的 db 表有 2 个字段 .... id (AUTO_INCREMENT) $ price ..

在顶部代码中:

如果新价格 = 最新价格,则以背面颜色回显数字。

如果新价格>最新价格与绿色相呼应。

如果新价格

现在。用 foreach 回显所有记录。我只想要最新的记录(2000)...

表格

id | price
1  | 2300
2  | 2300 
3  | 2301  
4  | 2290
5  | 2000

【问题讨论】:

  • 如果只有一条记录不需要循环。
  • 怎么只能回显不循环?
  • 不确定你的意思,echo 'hi';
  • 我只想回显最新记录 id 5 = 2000 没有所有记录
  • 你说的正是那个评论,我已经回复了。非常基本的东西,php.net/manual/en/function.echo.php.

标签: php mysql sql pdo


【解决方案1】:

如果你想要最新的价格,而不是最高的价格,你应该通过(我在这里假设)自动递增id 订购:

select * from uds order by id desc limit 1 

如果您想比较两个最新价格,请使用limit 2 而不是limit 1。然后,您可以使用索引0 请求$pays 的最新价格和使用索引1 的先前最新价格(因为记录按降序排序)。

【讨论】:

  • 当 $i=0 回显未定义偏移量:-1 in for($i=0; $i
  • 你的意思是我看不懂..请写代码
  • @ERROR_404:您拥有所需的所有代码,只需使用我回答中的查询和建议即可。
  • 我将我的代码修改为此但回显未定义索引:价格////// $color = $color = 'black'; if($pays ['price'] 0) $color = 'green';否则 $color = '黑色'; echo " " .$pays ['price']。 " ";
【解决方案2】:

您的 SQL 语句几乎是正确的,但您按价格而不是按“插入行的时间”或换句话说按 ID 排序。改成:

  select * from uds order by id desc limit 1 

因此,您只会获得最新插入的行以进行比较。所以你的结果的count()1。这显示了您的代码中的另一个错误。在此之后,以下代码行将永远不会实现:

`for($i=1; $i<count($pays); $i++)`

1 &lt; 1 永远不会是真的。改成

if(!empty($pays)) {
  $color = 'black';
  if($pays['price']) {
  // ...
} else {
  echo "No data row fetched";
}

因此,您检查是否从数据库中返回了一条记录,如果是,则使用该记录。

【讨论】:

    猜你喜欢
    • 2017-07-07
    • 1970-01-01
    • 1970-01-01
    • 2017-11-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-14
    • 1970-01-01
    相关资源
    最近更新 更多