php sql используя odbc - PullRequest
       6

php sql используя odbc

0 голосов
/ 15 февраля 2009

Привет, я делаю сайт на php с базой данных Microsoft Access через odbc, и я столкнулся с небольшой проблемой, позвольте мне сначала показать вам мои коды.

<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 довольно грязное, так как я делаю из этого грубую ошибку.

1 Ответ

1 голос
/ 18 февраля 2009

Попробуйте отделить SQL от PHP.

Я полагаю, вы спрашиваете, как вернуть только одну строку, а не все строки. Для этого используйте ключевое слово «TOP». Например,

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

Что касается второй части вашего вопроса: «где $ td наименьшее значение в пределах $ tssd меньше 10800», мы не знаем имен столбцов, к которым они относятся. Если мы представим, что они названы TD и TSSD в таблице vehicle_log, то ваше утверждение может выглядеть следующим образом:

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".

Если это не то, что вы ищете, можете ли вы предоставить больше информации?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...