ODBC kullanarak php sql

1 Cevap php

Hi Im odbc üzerinden bir Microsoft Access veritabanı ile php bir web sitesi yapma ve ben bana ilk sen benim kodları göstereyim küçük bir sorun rastlamak var.

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

what I want to be done now is to only display one output not all. Firstly I want to select only the data where variable $tssd is less than or equal to 10800 then i want to display the smallest $td out of what i selected and it shoud display

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

where $td is the least within $tssd is less than 10800 It should only display one

bana php oldukça yeni im ve i bunun dışında gaf yapmak olduğu gibi benim sql deyimi oldukça dağınık yardım etmeye çalışın lütfen.

1 Cevap

PHP SQL ayırmaya çalışın.

Ben yerine tüm satırlar daha yalnızca tek bir satır dönmek nasıl soruyorsun inanıyorum. Bunu başarmak için, "TOP" anahtar sözcüğünü kullanın. Örneğin,

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

Sorunuzun, ikinci bölümü için "$ td $ TSSD içinde az olan daha az 10800 olduğunu", bu ilişki sütun isimlerini bilmiyorum. Biz onlar vehicle_log tabloda TD ve TSSD fişlendi iddia ederse, o zaman ifadesi bu gibi görünebilir:

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

Son olarak, ben "i küçük $ td görüntülemek istediğiniz" karşılamak için ORDER BY değişti.

Bu sizin için ne arıyorsanız değil ise, daha fazla bilgi sağlayabilir?