2010-05-17 3 views
0

В MySQL, я использую следующие три таблицы (их поля перечислены после их названия):Регистрация с тремя таблицами

комментарий:

commentid loginid submissionid comment datecommented 

Логин:

loginid username password email actcode disabled activated created points 

представление :

submissionid loginid title url displayurl datesubmitted 

I хотел бы отобразить «datecommented» и «comment» для данного «username», где «username» равно переменной с именем $profile. Я также хотел бы сделать «комментарий» гиперссылкой на http://www...com/.../comments/index.php?submission='.$rowc["title"].'&submissionid='.$rowc["submissionid"].'&url='.$rowc["url"].'&countcomments='.$rowc["countComments"].'&submittor='.$rowc["username"].'&submissiondate='.$rowc["datesubmitted"].'&dispurl='.$rowc["displayurl"].', где countComments равно COUNT(c.commentid) и $rowc является частью запроса, указанного ниже.

Я попытался использовать следующий код, чтобы сделать то, что хочу, но это не сработало. Как я могу изменить его, чтобы он делал то, что я хочу?

Спасибо заранее,

Джон

$sqlStrc = "SELECT 
       s.loginid 
       ,s.title 
       ,s.url 
       ,s.displayurl 
       ,s.datesubmitted 
       ,l.username 
       ,l.loginid 
       ,s.title 
       ,s.submissionid 
       ,c.comment 
       ,c.datecommented 
       ,COUNT(c.commentid) countComments 
      FROM 
       submission s 
      INNER 
      JOIN 
       login l 
       ON 
       s.loginid = l.loginid 
      LEFT OUTER 
      JOIN 
       comment c 
       ON 
       c.loginid = l.loginid 
      WHERE l.username = '$profile'  
      GROUP 
       BY 
       c.loginid 
      ORDER 
       BY 
       s.datecommented DESC 
      LIMIT 
       10";  


    $resultc = mysql_query($sqlStrc); 

$arrc = array(); 
echo "<table class=\"samplesrec1c\">"; 
while ($rowc = mysql_fetch_array($resultc)) { 
    $dtc = new DateTime($rowc["datecommented"], $tzFromc); 
    $dtc->setTimezone($tzToc); 
    echo '<tr>'; 
    echo '<td class="sitename3c">'.$dtc->format('F j, Y &\nb\sp &\nb\sp g:i a').'</a></td>'; 
    echo '<td class="sitename1c"><a href="http://www...com/.../comments/index.php?submission='.$rowc["title"].'&submissionid='.$rowc["submissionid"].'&url='.$rowc["url"].'&countcomments='.$rowc["countComments"].'&submittor='.$rowc["username"].'&submissiondate='.$rowc["datesubmitted"].'&dispurl='.$rowc["displayurl"].'">'.stripslashes($rowc["comment"]).'</a></td>'; 
    echo '</tr>'; 
    } 
echo "</table>"; 

ответ

1

ли вы имеете в виду, чтобы показать последние 10 комментариев от определенного пользователя? В этом случае отмените предложение GROUP BY c.loginid. Предложение where, которое уже выбрало комментарий от этого конкретного пользователя. Группа попытается объединить их в одну строку. Совокупность и значение детали, например s.url, не смешиваются.

+0

P.S. Я думаю, вам нужен второй запрос, чтобы найти COUNT (c.commentid). Вы не можете вернуть все из них в одном запросе. –

0

Если я правильно понимаю вашу цель правильно, вы должны просто цепь таблицы:

SELECT <yourfields> 
FROM comment c 
JOIN login l ON l.loginid = c.loginid 
JOIN submission s ON s.submissionid = c.submissionid 
WHERE l.username = ? 
Смежные вопросы