繁体   English   中英

使用odbc的PHP SQL

[英]php sql using odbc

大家好,我是通过odbc在php中创建一个带有Microsoft Access数据库的网站,我遇到了一个小问题,让我先向您展示我的代码。

<form method ="POST" action="maxtimestamplog.php">

Longitude <input type="text" name="longitude"  /><br/>
Latitude 
<input type ="text" name = "latitude"/>
<input name="ok" type="submit" value="Submit" />
</form>

<?

$dbc = odbc_connect("X1","","");    // Trying to establish connection
                                            // with database
echo "<br>";

$datetime =date('Y-m-d H:i:s', strtotime('+8 hours'));
echo "The Current date/time is $datetime";
echo "<br><br><br>";



if (!$dbc)
{
    exit("Connection failed:".$dbc);
}
$x_origin = $_POST['longitude'];
$y_origin = $_POST['latitude'];
$query = " SELECT m.vehicle_no, 
l.longitude, 
  l.latitude, 
  l.timestamp
FROM
  vehicle_log AS l,
  GPS_modem   AS m 
WHERE
  m.modem_ID = l.modem_ID
  AND l.timestamp = (
    SELECT MAX(timestamp) FROM vehicle_log WHERE modem_ID = l.modem_ID

  ) order by timestamp desc
";  // SQL Statement

$rs = odbc_exec($dbc,$query);
    if (!$rs)
    {
        exit("Error in SQL. ".$rs);
    }
    $i=1;
while (odbc_fetch_row($rs))
{
    $lng = odbc_result($rs, "longitude");
    $lat = odbc_result ($rs, "latitude");
    $ts = odbc_result ($rs, "timestamp");
    $vno = odbc_result ($rs, "vehicle_no");


    $yyyy= substr($ts, 0, 4);
    $mm= substr($ts, 5, 2);
    $dd= substr($ts, 8,2);
    $hr= substr($ts, 11, 2);
    $min= substr($ts, 14,2);
    $sec= substr($ts,17, 2);
    $cyyyy= substr($datetime, 0, 4);
    $cmm= substr($datetime, 5, 2);
    $cdd= substr($datetime, 8,2);
    $chr= substr($datetime, 11, 2);
    $cmin= substr($datetime, 14,2);
    $csec= substr($datetime,17, 2);

    $ctss = $csec 
                     + ($cmin * 60) 
                     + ($chr * 60 * 60)
                     + ($cdd * 24 * 60 * 60) 
                     + ($cmm * 30 * 24 * 60 * 60) 
                     + ($cyyyy * 365 * 24 * 60 * 60);
    $tss = $sec 
                     + (cmin * 60) + ($hr * 60 * 60) 
                     + ($dd * 24 * 60 * 60) 
                     + ($mm * 30 * 24 * 60 * 60) 
                     + ($yyyy * 365 * 24 * 60 * 60);

    $tssd = $ctss - $tss;

    $x = $lng;
    $y = $lat;
    $i = $i + 1;
    $xd = ($x - $x_origin);
    $yd = ($y - $y_origin);
    $d = ($xd*$xd) + ($yd*$yd);
    $td = sqrt($d);
    echo "Car Number $vno is at a distance $td away at timestamp $ts";
    echo "</br></br>";
}
odbc_close($dbc);
    ?>
</HTML>

我现在要做的是仅显示一个输出而不是全部。 首先,我只想选择变量$ tssd小于或等于10800的数据,然后我要显示我选择的内容中最小的$ td并显示

echo "Car Number $vno is at a distance $td away at timestamp $ts";
echo "</br></br>";

其中$ td是$ tssd中最小的值小于10800它应该只显示一个

请尝试帮助我,我对php很陌生,我的sql语句非常混乱,因为它使我犯了错误。

尝试将SQL与PHP分开。

我相信您在问如何仅返回单行而不返回所有行。 为此,请使用“ TOP”关键字。 例如,

SELECT TOP 1
  m.vehicle_no, 
  l.longitude, 
  l.latitude, 
  l.timestamp

对于您问题的第二部分,“ $ tsd中$ td最小的位置小于10800”,我们不知道与它们相关的列名称。 如果我们假装在vehicle_log表中将它们分别命名为TD和TSSD,那么您的语句可能如下所示:

SELECT TOP 1 m.vehicle_no, 
l.longitude, 
  l.latitude, 
  l.timestamp,
  l.TD,
  l.TSSD
FROM
  vehicle_log AS l,
  GPS_modem   AS m 
WHERE
  m.modem_ID = l.modem_ID
  AND l.timestamp = (
    SELECT MAX(timestamp) FROM vehicle_log WHERE modem_ID = l.modem_ID

  )
  AND l.TD <= 10800
  order by l.TD ASC

最后,我更改了ORDER BY以适应“我想显示最小的$ td”。

如果这不是您想要的,您可以提供更多信息吗?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM