2013-03-28 2 views
3


은 내가 student_info 날짜의 2 표, student_info 내 databace에서 student_payment ...mysql에서 2 databace 테이블에서 데이터를 선택하는 방법 ....?

이 내가 가지고

ID, student_id, student_mail, student_pass, STUDENT_NAME, ...

student_payment에 있습니다

ID, student_id, student_payment_id, student_payment_date, ...

그래서 내 문제는 내가 선택 싶어, 여기 student_namestudent_id 폼 student_info하지만 난 문제와 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은 초보자거야)

+0

'$ student_id = $ rows [ 'student_id'];'는 데이터 세트의 마지막 레코드 ID를 제공합니다. – asprin

답변

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 

조인에 대해 더 친절하게 아래의 링크를 방문, 더 많은 지식을 얻을 수 :

1

는 대신 당신이 원하는 행을 얻을 수있는 테이블을 조인 할 수 있습니다, 두 번 대신 쿼리 데이터베이스의

$sql2 = "SELECT * FROM `student_info` WHERE student_id IN ($student_id)"; 
+0

이것은 현재 문장과 동일합니다 :'$ sql2 = "SELECT * FROM \ student_info \'WHERE student_id = $ student_id"; ' –

+0

내가 didi하지만 2 행의 데이터가 있고 그것을 사용하는 방법을 모릅니다. 함께 foreach ... –

1

그것은 당신이이 테이블에 가입 할 수 있습니다, 가입 INNER와 그것을 해결하기 위해 가능 1 개의 쿼리에서 두 값을 모두 사용하십시오.

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

또는 당신이 필요한 경우에는 OOP 방법, 확실하지를 사용할 수 있습니다. 2 개의 쿼리에서 2 개의 개체를 만들어 foreach에 넣습니다.

1

$sql2 = " SELECT * FROM `student_info` WHERE student_id= '$student_id' "; 
0

사용 Mahmoud Gamal 코드를 시도

그러나 항상 필요한 열을 선택뿐만 아니라 모든

의 성능을 저하시킬 수있는 증가 할 수 테이블의 열 향후 수 년

때문에 당신의 신청. 또한 중요한 정보가 유출되지 않을 수 있습니다.

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"; 
} 
0

모든 지불 내역을보고 싶은 것 같습니다. 학생 이름이 지불 정보와 함께 표시됩니다. 결과에는 학생 당 1 회 이상 지불해야 할 것입니다.

이 결과는 단일 쿼리 대신 두 개의 테이블을 조인하고 사용할

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 
0

시도 학생의 이름으로 주문하고 지불 날짜 (최근 첫번째)입니다 - $의 SQL = "를 student_info SELECT * FROM , student_payment where student_info.student_id = student_payment.student_id "

관련 문제