0

私はプロジェクトに取り組んでいますが、何をしてもこれを正しく行うことができないようです。

db、year、manufacturer_id、models に 3 つのテーブルがあります。

ユーザーからのリクエストに基づいて、メーカーとモデルを表示したいと思います。つまり、ユーザーが Make as Ford を選択し、次に Year as 1942 を選択した場合、Model はその年に生産されたすべてのモデルのリストを返す必要があります。しかし、うまくいかないので、どこが間違っているのか教えてください。

私のデータベーステーブルは次のように設定されています。

製造元 2 列の ID (一意) と製造元

年 2 列 ID (一意) と年

model 4 列 id (一意) year (年 id テーブルに対応) manufacturer_id (manufactured id テーブルに対応) および model。

私が使用しているコードは次のとおりです。

 <tr>
<td align="right" label for='formyear'>Year: </td>
<td><select name="formyear">
<?php 
$sql="SELECT id,year FROM year";
$result =mysql_query($sql);
while ($data=mysql_fetch_assoc($result)){
?>
<option value ="<?php echo $data['id'] ?>" ><?php echo $data['year'] ?></option>
<?php } ?>
</select></td>
</tr>
<tr>
<td align="right" label for='formmake'>Make: </td>
<td><select name="formmake" id="formmake" onchange="return populateModel(this.value);">
<?php 
$sql="SELECT id,manufacturer FROM manufacturer";
$result =mysql_query($sql);
while ($data=mysql_fetch_assoc($result)){
?>
<option value ="<?php echo $data['id'] ?>" ><?php echo $data['manufacturer'] ?></option>
<?php } ?>
</select>
</td>
</tr>
<tr>
<td align="right" label for='formmodel'>Model: </td>
<td><select name="formmodel" id="formmodel">
<?php 
$sql="SELECT id,manufacturer_id,model FROM model WHERE year='1'";
$result =mysql_query($sql);
while ($data=mysql_fetch_assoc($result)){
?>
<option value ="<?php echo $data['id'] ?>" ><?php echo $data['model'] ?></option>
                                <?php } ?>

                                </select>

私はこれを台無しにしているようです。これを見て助けてくれたすべての人に感謝します。

4

2 に答える 2

0

if you are serious use PDO.

Having said that I would put the year in the model table. yes you would have multiple entries for a given model, but to have a separate table for year means you would have to associate that year with all relevant models, obviously years for each model differ. just add a year field, INNER JOIN on the make ID

I am not a car person but probably less models than years, in which case adding model Id to years table would be less entries.

if you were using the years table for something else, i.e. a form for users to submit their info... use a year ID in the model table and INNER JOIN all three.

the point remains the same though... you have multiple model table rows, one for each year

于 2012-07-17T06:19:13.763 に答える
0

年と製造元のドロップダウンの両方について、変更時に、javascript 関数で選択された年と製造元の両方の値を取得します (設定されていない場合は空と見なされます)。

次に、関連する列を取得するために、上記の値をパラメーターとして使用して ajax 呼び出しを php ファイルに送信できます。その php ファイルでは、送信されたデータに基づいてモデルを確認できます。

$year=(isset($_REQUEST['year']) && $_REQUEST['year']!='')?$_REQUEST['year']:'';
$mfr_id=(isset($_REQUEST['mfr_id']) && $_REQUEST['mfr_id']!='')?$_REQUEST['mfr_id']:'';

$sql="SELECT id,model FROM model";
if($year!='')
{
    $sql.=" WHERE year=".$year;
    if($mfr_id!='')
        $sql.=" and manufacturer_id=".$mfr_id;
}
else
{
    if($mfr_id!='')
        $sql.=" WHERE manufacturer_id=".$mfr_id;
}
$result =mysql_query($sql);

結果セットの行は、基準に基づいてフィルター処理されます。

于 2012-07-18T06:06:43.897 に答える