3


我有 2 个日期表,student_info并且student_payment在我的数据库中...

student_info我有:

id, student_id,student_mail,student_pass,student_name,...

并且student_payment有:

id,student_id,student_payment_id,student_payment_date,...

所以我的问题就在这里,我想选择student_info的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"; 
}

但我不知道如何连接 student_id 和 student_name 并使用,foreach因为我有 2 行数据。

(我是 PHP / MySql 的初学者)

4

8 回答 8

1

试试这个

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

您可以代替查询数据库两次,而是加入表以获取所需的行。尝试在 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 回答
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

试试这个

 $sql2 = " SELECT * FROM `student_info` WHERE student_id= '$student_id'   ";
于 2013-03-28T12:10:40.617 回答
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 回答
0

使用Mahmoud Gamal代码

但始终只选择所需的列,而不是全部,因为

将来表中的列数可能会增加,这可能会降低应用程序的性能。它还可能包含一些不可泄露的重要信息。

于 2013-03-28T12:16:54.640 回答
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

尝试加入表并使用单个查询而不是两个 - $sql = "SELECT * FROM student_info, student_payment WHERE student_info.student_id=student_payment.student_id"

于 2013-03-28T13:09:59.613 回答