【发布时间】:2010-10-07 17:34:26
【问题描述】:
您好,我通过 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>";
$tssd 中 $td 最小的地方小于 10800 它应该只显示一个
请尝试帮助我,我对 php 很陌生,我的 sql 语句很混乱,因为我犯了错误。
【问题讨论】:
-
严格来说,您使用的不是“MS Access”数据库,而是Jet 数据库。 MDB 的“访问”部分(表单/报告/等)不能通过 ODBC 使用——只有数据表和查询(即纯 Jet 对象)可用。是的,你是对的,MS 将 ODBC 驱动程序命名为“MS Access”。
-
严格来说,它是一个 DBMS,而不是“数据库”,他们将驱动程序命名为“Microsoft Access”。但是,嘿,谁需要严格? ;-)
-
当然,人们经常在 ACE/Jet 对象(Validation Rule、VIEW、PROCEDURE 等)中引用 MS Access 对象(表单的控件、NZ() 函数等),从而渲染 ACE/ Jet 对象无法通过 ODBC、OLE DB 等使用。
-
我认为正是因为您所指出的,保持 Access 和 Jet 之间的区别非常重要——它们是两个不同的问题空间,并且任何一个的解决方案都将完全不同。