3


日付のテーブルが2つstudent_infoありstudent_payment、データベースには...

student_info私が持っている:

id, 学生ID,学生メール,学生パス,学生名,...

そしてstudent_payment持っています:

id,student_id,student_payment_id,student_payment_date,...

だから私の問題はここにあります、私は学生情報からstudent_nameどこを選択したいのですが、問題がありstudent_id、mysqlはエラーを出します:

$db->connect();

$sql = "SELECT * FROM `student_payment`";
$rows = $db->fetch_all_array($sql);
$student_id = $rows['student_id'];

$sql2 = "SELECT * FROM `student_info` WHERE student_id=$student_id";
$rows2 = $db->fetch_all_array($sql2);

$db->close();

foreach($rows as $record ){ 
        // i wanna to use student_name in first line 
    echo "\n<tr>
            <td>$record[student_id]</td> 
            <td dir=\"ltr\">$record[student_payment]</td>
            <td dir=\"ltr\">$record[student_payment_id]</td>
            <td dir=\"ltr\">$record[student_payment_bank]</td>
            <td dir=\"ltr\">$record[student_payment_type]</td>
            <td dir=\"ltr\">$record[student_payment_date]</td>
            <td dir=\"ltr\"></td>
            </tr>\n"; 
}

foreachしかし、 2行のデータがあるため、student_idとstudent_nameを接続して使用する方法がわかりません。

(私はPHP / MySqlの初心者です)

4

8 に答える 8

1

INNER JOIN で修正できます。2 つのテーブルを結合して、1 つのクエリから両方の値を使用できます。

http://www.w3schools.com/sql/sql_join_inner.asp

または、OOP の方法を使用することもできますが、それが必要かどうかはわかりません。2 つのクエリから 2 つのオブジェクトを作成し、それらを foreach に入れます。

于 2013-03-28T12:09:31.610 に答える
1
foreach($rows as $record ){ 
    // i wanna to use student_name in first line 
echo "\n<tr>
        <td>$record[student_id]</td> 
        <td dir=\"ltr\">".$record['student_payment']."</td>
        <td dir=\"ltr\">".$record['student_payment_id']."</td>
        <td dir=\"ltr\">".$record['student_payment_bank']."</td>
        <td dir=\"ltr\">".$record['student_payment_type']."</td>
        <td dir=\"ltr\">".$record['student_payment_date']."</td>
        <td dir=\"ltr\"></td>
        </tr>\n"; 
}
于 2013-03-28T12:21:17.980 に答える
1

これを試して

 $sql2 = " SELECT * FROM `student_info` WHERE student_id= '$student_id'   ";
于 2013-03-28T12:10:40.617 に答える
1

これを試して

  $sql2 = "SELECT * FROM `student_info` WHERE student_id IN ($student_id)";
于 2013-03-28T12:08:16.103 に答える
1

データベースに 2 回クエリを実行する代わりに、テーブルを結合して必要な行を取得できます。以下のクエリを PhpMyAdmin で実行するか、MySQL ブラウザで直接実行してみてください。

SELECT  a.*, b.*
FROM    student_info a
        INNER JOIN student_payment b
            ON a.student_ID  = b.student_ID
-- WHERE ...if you have extra conditions...
ORDER   BY b.student_payment_date DESC

結合についてさらに詳しく知りたい場合は、以下のリンクにアクセスしてください。

于 2013-03-28T12:08:26.507 に答える
0

行われたすべての支払いのレポートが必要なようです。学生名は支払い情報とともに表示されます。結果は、おそらく学生ごとに複数の支払いが発生します。

この結果は、学生名、支払日の順に表示されます (最新のものから順に表示されます)。

SELECT s.student_name, sp.*
  FROM student_payment sp
  INNER JOIN student_info s ON s.student_ID=sp.student_ID
  ORDER BY s.student_name ASC, sp.student_payment_date DESC
于 2013-03-28T12:26:50.590 に答える
0

Mahmoud Gamalコードを使用する

ただし、すべてではなく常に必要な列のみを選択してください。

将来、テーブルの列数が増える可能性があり、アプリケーションのパフォーマンスが低下する可能性があります。また、漏洩してはならない重要な情報が含まれている場合もあります。

于 2013-03-28T12:16:54.640 に答える
0

テーブルに参加して、2 つではなく 1 つのクエリを使用してみてください - $sql = "SELECT * FROM student_info, student_payment WHERE student_info.student_id=student_payment.student_id"

于 2013-03-28T13:09:59.613 に答える