2013-01-10 1 views
0

반복하는 것이 좋겠지 만, 내 질문에 답변이되는 것은 찾을 수 없습니다.Mysql 가입을 요청하는 데 도움이 필요합니다.

나는 php와 mysql을 사용하여 포럼을 만들고 있으며, 지금까지는 그렇게 좋았지 만 가장 최근 게시물의 날짜를 기준으로 각 카테고리의 스레드를 정렬하려고합니다.

내 데이터베이스 구조는 이것이다 :

Table: threads 
Fields: name, f_id, t_id 

Table: posts 
Fields: author, date, post, t_id, p_id 

스레드는 스레드의 이름을 가지고는이에 포럼, 그리고 자신의 자동 증가 스레드 ID의 f_id. 게시물에는 작성자, 날짜, 게시물, 스레드가있는 t_id 및 자동 증가 게시물 ID가 있습니다. 이를 위해 두 번째 게시물은 첫 번째 게시물보다 항상 ID가 높습니다. 중간에 다른 게시물에 게시물이 만들어 지더라도.

특정 포럼에 모든 스레드를 표시하고 싶을 때 내 문제가 발생합니다. 날짜가 게시물에 스레드에서 첫 루프 잡고 있기 때문에 날짜별로 주문할 수 없습니다 제외하고는 잘 모든 작동

$t_query = mysqli_query($link, "SELECT name, t_id FROM threads WHERE f_id = ".$f_id.""); 

echo "<table><tr><td>Name</td><td>Author</td><td>Date</td></tr>"; 
while($rowt = mysqli_fetch_array($t_query)) { 
    $p_query = mysqli_query($link, "SELECT author, DATE_FORMAT(date, '%r on %c/%e/%Y') as date_f, p_id FROM posts WHERE t_id = ".$rowt['t_id']." LIMIT 1"); 
    echo "<tr><td><a href=\"../pages/post.php?t_id=",htmlentities($rowt['t_id']),"\">",htmlentities($rowt['name']),"</a></td>"; 
     while($rowp = mysqli_fetch_array($p_query)){ 
      echo "<td>",htmlentities($rowp['author']),"</td><td>",htmlentities($rowp['date_f']),"</td></tr>"; 
} 
echo "</table>"; 

: 나는 현재이 코드를 사용합니다. 내가 성취해야 할 것은 t_id가 쓰레드의 t_id와 같은 게시물에서 가장 높은 p_id의 날짜를 잡아내는 조인이다.

조금 혼란스러워 보이지만 누군가가 나를 조인 쿼리에 도움이되고 내 PHP를 조정 해주기를 바랍니다.

감사합니다.

답변

1

스레드 목록을 가장 최근 게시물의 날짜순으로 정렬한다고 가정합니다. 가장 최근 날짜에 한 번 두 번 게시하고 더 최근 게시물이 없는지 두 번째로 확인하십시오. 예를 들어 ...

SELECT t.name, t.t_id 
FROM threads t 
JOIN posts p1 ON (p1.t_id = t.t_id) 
LEFT JOIN posts p2 ON (p2.t_id = t.t_id AND p2.p_id > p1.p_id) 
WHERE p2.p_id IS NULL 
ORDER BY p1.date; 
+0

작동하지만 작동 시키려면 t.f_id =를 추가해야했습니다. 내 두 번째 루프를 조정하여 최신 날짜를 잡아야 했어. Thanks1 – sharf

2

당신은 단지이 최대로 그룹화 및 주문에 가입해야합니다 :이 쿼리는 늘 빈 스레드를 찾을 수 있기 때문에

SELECT t.name, t.t_id FROM threads t 
INNER JOIN posts p ON p.t_id = t.t_id 
WHERE t.f_id = ID 
GROUP BY t.name, t.t_id 
ORDER BY MAX(p.date) 

, 당신은 모든 스레드에서 적어도 하나 개의 게시물이 가정 - 그 때문에 외부 조인을 사용해야합니다.

+0

그게 내가 뭘하려고했는지처럼 보이지만, mysqli_fetch_array()가 mysql 데이터를 기다리고 있지만 대신 부울 값을 얻는다는 오류가 발생합니다. 모든 게시물에는 적어도 1 개의 항목이 있습니다. – sharf

+0

은 쿼리에 오류가 있기 때문에 mysql_query가 false를 반환했다는 것을 의미합니다. mysql_error()로 에러 메시지를받을 수 있습니다. – Dutow

+0

14 번째 라인 (ORDER BY 라인)에 T_STRING 에러가 발생했습니다. 내가 asmecher의 코드로 작업하게 만들었지 만이 방법을 수정하여 둘을 비교할 수 있기를 바랍니다. – sharf