1

データベースから列車のリストを取得するクエリを作成しようとしています。ユーザーは本名を入力し、最初のクエリは駅または「tiploc」のコードを取得して、2番目のクエリで使用します。何らかの理由で何も返されません。tiplocをハードコーディングすると正常に機能するため、フェッチから取得したデータに関係していると確信しています。私はphpがかなり苦手なので、どんな助けでも素晴らしいでしょう!ありがとう

<?
 mysql_connect("localhost","root","XXXXXX")
or die ("No connection could be made to the OpenRail 
Database");mysql_select_db("autotrain");

$query1 = "SELECT tiploc_code FROM allstations WHERE c LIKE 'Cradley Heath';";

$result1 =mysql_query($query1);


$tiploc=null;
while($row = mysql_fetch_assoc($result1)){
$tipoc=$row['tiploc_code'];

}
$query2 = "SELECT allstations.C, locations.public_departure
FROM `locations` , allstations, schedules_cache,schedules
WHERE locations.id = schedules_cache.id
AND schedules_cache.id = schedules.id
AND '2012-11-11' BETWEEN schedules.date_from AND schedules.date_to
AND locations.tiploc_code = '$tiploc'
AND locations.public_departure >=1600
AND locations.public_departure <=1700
AND schedules.runs_su LIKE '1'
AND schedules_cache.destination = allstations.tiploc_code
ORDER BY locations.public_departure ASC;";

$result2=mysql_query($query2);

while($row = mysql_fetch_assoc($result2)){
echo($row['C']);

}
?>
4

3 に答える 3

0

PHPのマニュアルページにアクセスする場合は、mysql_fetch_assocの使用をお勧めしません。私はtiploc_codeがあなたのDBのフィールドであると仮定しています。したがって、DBにクエリを実行すると、オブジェクトが返されます。あなたが使うことができます

$tipoc = $reuslt1[0]->tiploc_code

1行しかない場合。複数の行がある場合は使用します。$ count = count($ result1);

for($i = 0;$i<count;$i++){
$tipoc = $reuslt1[$]->tiploc_code
$query2 = "SELECT allstations.C, locations.public_departure
FROM `locations` , allstations, schedules_cache,schedules
WHERE locations.id = schedules_cache.id
AND schedules_cache.id = schedules.id
AND '2012-11-11' BETWEEN schedules.date_from AND schedules.date_to
AND locations.tiploc_code = \"$tipoc \"
AND locations.public_departure >=1600
AND locations.public_departure <=1700
AND schedules.runs_su LIKE '1'
AND schedules_cache.destination = allstations.tiploc_code
ORDER BY locations.public_departure ASC;";

$result2=mysql_query($query2);

$c = $result2[0]->C;
echo $c;
}

ここでも、tiplocごとに「c」が1つだけあると想定しています。

于 2012-11-12T00:40:31.723 に答える
0

2つのこと:

まず、コードにタイプミスがあります。最初のクエリの最初のwhileループには、$tiplocではなく$tipocという変数があります。このため、2番目のクエリでは結果が得られません。

次に、2番目のクエリのロジックを最初のクエリのループ内に配置する必要があります。そうすれば、最初のクエリが結果を返した場合にのみ2番目のクエリを実行します。最初のレコードから単一のレコードのみを期待する場合は、ロジックをwhileループから次のようなifステートメントに変更できます。

if($row = mysql_fetch_assoc($result1)){
    $tiploc=$row['tiploc_code'];
    ...
    include your second query here inside the if statement.
于 2012-11-12T00:40:57.453 に答える
0

$ tipoc = $row['tiploc_code']を上書きしています。

次のコードを試してください。

<?
 mysql_connect("localhost","root","Boeing1992")
or die ("No connection could be made to the OpenRail 
Database");mysql_select_db("autotrain");

$query1 = "SELECT tiploc_code FROM allstations WHERE c LIKE 'Cradley Heath';";

$result1 =mysql_query($query1);


$tiploc=null;
$tipocArr = array();
while($row = mysql_fetch_assoc($result1)){
$tipocArr[] =$row['tiploc_code'];

}
$tipoc = implode(",",$tipocArr);

$query2 = "SELECT allstations.C, locations.public_departure
FROM `locations` , allstations, schedules_cache,schedules
WHERE locations.id = schedules_cache.id
AND schedules_cache.id = schedules.id
AND '2012-11-11' BETWEEN schedules.date_from AND schedules.date_to
AND locations.tiploc_code IN '$tiploc'
AND locations.public_departure >=1600
AND locations.public_departure <=1700
AND schedules.runs_su LIKE '1'
AND schedules_cache.destination = allstations.tiploc_code
ORDER BY locations.public_departure ASC;";

$result2=mysql_query($query2);

while($row = mysql_fetch_assoc($result2)){
echo($row['C']);

}
?>
于 2012-11-12T00:42:09.517 に答える