2012-06-12 4 views
0

이 시나리오가 있습니다.PHP와 MySQL, 2 개의 키와 연관된 배열

입력 한 $ groupid = "1"; 의

기본 테이블

---------------------- 
| groupid | postid | 
|---------------------| 
|  1 |  1 | 
|  2 |  2 | 
|  1 |  3 | 

$query = "SELECT postid FROM `mainl` WHERE groupid='$groupid'"; 
$result = mysql_query($query); 

// a group of postids belonging to that groupid which should hold [1, 3] for groupid=1 
while($row = mysql_fetch_array($result)) { 
    $postids[] = $row["postid"]; 
} 

두 번째 테이블

------------------------------------------- 
| postid | commentid |  comment | 
------------------------------------------- 
|  1 |   1 | testing 1 | 
|  1 |   2 | testing 2 | 
|  1 |   3 |  what? | 
|  2 |   1 |  hello | 
|  2 |   2 | hello world | 
|  3 |   1 |  test 3 | 
|  3 |   2 |  begin | 
|  3 |   3 |  why? | 
|  3 |   4 |  shows | 


$query = "SELECT * FROM `second`"; 
$result = mysql_query($query); 

while ($row = mysql_fetch_array($result)) { 
    if (in_array($row["postid"], $postids)) { 
     $comments[$row["postid"]] = $row["comment"]; 

하지만 어떻게해야주의
내가 postid 배열이 [1,3]로와 내 댓글 배열이 원하는 주석 [commentid: comment] [1:testing1, 2: testing2, 3: what?] (postid=1)(210) 및 postid=3

에 대한
[1:test3, 2:begin, 3: why? 4:shows] 방법 commentid 및 postid과 관련된 모든 것을 같은 주석을 준비해야 하는가?

SELECT * FROM second as second_tab LEFT join main as main_table ON main_table.post_id=second_table.post_id WHERE main_table.group_id="3" 

는 글쎄 지금은 테스트하지하지만 방법은 문제의 일부를 먹으 렴 해결하기 위해 : 당신은 하나 개의 문장을 수 있도록

+4

mysql_ * 함수는 더 이상 사용해서는 안되며, php는 mysql 데이터베이스에 액세스하기 위해보다 새롭고, 빠르고 안전한 버전을 가지고 있습니다. mysqli_ * 함수가 사용되어야한다. 더 많은 정보와 구문은 여기에서 찾을 수 있습니다. http://php.net/manual/en/mysqli.query.php –

+0

그는 무엇을 사용해야합니까? 나는 PHP 매뉴얼에서 정보를 찾으려고했지만 아무 것도 찾을 수 없었다. –

+0

SQL JOIN 문 – codingbiz

답변

0

내가는 SQL에서 조인을 사용하는 것 같아요!

1

먼저 난 후

while ($row = mysql_fetch_array($result)) 
    $groups[$row['groupid'][$row['postid']][$row['commentid']=$row['comment']; 

배열

foreach($groups as $group)  
    foreach($group as $post) 
     foreach($post as $comment) 
      echo $comment; 

반복하는 다차원 배열을 만들 것이다 rokdd 제안을 따라 1 개 쿼리이어서

SELECT m.groupid , s.postid, s.commentid, s.comment FROM `main1` m JOIN `second` s USING (postid) where m.groupid = 1 

할 것이다 그룹을 계속 추적합니다 (하나 이상의 그룹을 선택하려는 경우).그룹에 신경 쓰지 않는다면 배열의 첫 번째 부분 만 삭제하면됩니다.

while ($row = mysql_fetch_array($result)) 
    $posts[$row['postid']][$row['commentid']=$row['comment']; 


    foreach($posts as $post) 
     foreach($post as $comment) 
      echo $comment; 
+0

잘 @php면 그가 무엇을하고 싶은지 확실하지 않았습니다. 여러 번 반복하기 전에 seperator로 키를 만들 수 있고 하나의 배열을 가질 수있다 :'$ comments [$ row [ 'groupid']. ''. $ row [ 'postid']. ''. $ row [ 'commentid']] = $ row [ 'comment'];' – rokdd