의견으로 뉴스 업데이트 시스템을 프로그래밍하고 있습니다. 나는 세 개의 테이블을 가지고있다.GROUP_CONCAT에서 개별 행을 삭제하는 방법은 무엇입니까?
news_tbl
users_tbl
(뉴스 게시물의 저자)comments_tbl
(외래 키와 연결되어 - news_id) 내가 함께 두 가지 방법을 시도
, 그리고없이 GROUP_CONCAT
. 그러나, 나는 뉴스 업데이트에 부착 된 모든 의견을 표시 할,
SELECT *, COUNT(comments_tbl.comments_id) AS `comments_count`
FROM news_tbl AS n
LEFT JOIN users_tbl AS u
ON n.user = u.username
LEFT JOIN comments_tbl AS c
ON c.news_id = n.news_id
GROUP BY n.news_id;
그것은 작동하지만, 나는 첫 번째 기록 된 의견을 표시 할 수 있습니다
나는이 시도했다.
나는 또한 코멘트에 대해 GROUP_CONCAT
을 사용 했으므로 각 코멘트에 대해 뉴스 게시물의 중복이 없습니다. 나는 그것이 올바른 방법인지는 모르겠지만 작동합니다.
내 문제는 로그인 시스템이있어서 사용자가 개별적으로 주석을 삭제할 수있게하고 각 사용자에 대해 삭제 버튼을 사용하기를 원합니다. 하지만 개별적으로 의견을 구분하는 방법을 알지 못하고 각 의견에서 ID를 가져옵니다. 나는 PHP의 explode
을 시도했지만, 나에게 도움이되지 못했다. 그래서 뭔가 같은 내가 바로 당신의 질문을 이해하면
<?php
require_once('connect.inc.php');
$conn = dbConnect('pdo') or die('no connection');
$sqlquery = "SELECT news_tbl.*, users_tbl.*,
GROUP_CONCAT(comments_tbl.comments_id) AS commentsid,
GROUP_CONCAT(CONCAT ('<hr><h6>Navn: ', comments_tbl.name,'</h6>','<p>',comments_tbl.comment, '</p>') SEPARATOR '<br><br>') AS comments,
COUNT(comments_tbl.comments_id) AS comments_count
FROM news_tbl
LEFT JOIN comments_tbl ON comments_tbl.news_id = news_tbl.news_id
LEFT JOIN users_tbl ON news_tbl.user = users_tbl.username
GROUP BY news_tbl.news_id
ORDER BY news_tbl.news_id DESC LIMIT 5";
$result = $conn->query($sqlquery);
foreach($result as $row) {
// AS
$commentsid = $row['commentsid'];
$comments = $row['comments'];
$count = $row['comments_count'];
//users_tbl
$username = $row['username'];
//news_tbl
$newsid = $row['news_id'];
$headline = $row['headline'];
$bodytext = $row['bodytext'];
$picture = $row['picture'];
$date = $row['date'];
//comments_tbl
$commentid = $row['comments_id'];
$name = $row['name'];
$comment = $row['comment'];
?>
<div class="row-fluid">
<div class="news">
<div class="text-left">
<h3 class="pull-top"><?php echo $headline ?></h3>
<div class="row-fluid span12">
<img src="<?php echo 'upload/'.$picture ?>" class="span9 img-news"/>
</div>
<div class="row-fluid">
<div class="span3">
<p class="author"><i><span class="red">Skrevet af: </span> </i><?php echo $username ?></p>
</div>
<div class="span4">
<p><i ><span class="red">Oprettet:</span> </i> <?php echo $date ?></p>
</div>
</div><!--/ End author-row -->
<!--<p class="author"><i><span class="red">Skrevet af: </span> </i><?php echo $username ?> | <i ><span class="red">Oprettet:</span> </i> <?php echo $date ?></p>-->
<p class="push-top-bottom"><?php echo $bodytext ?></p>
</div>
<hr>
<p class="text-left pull-top3"> <b><?php echo $count ?> kommentar</b></p>
<hr class="grey">
<div class="row-fluid pull-top2">
<div class="pull-left span12 text-left well">
<?php echo $comments; ?>
</div>
<!-- Opret kommentar -->
<div class="row-fluid pull-left">
<form action="insert.php?<?php echo 'news_id=' . $newsid; ?>" method="post" class="pull-left leave-comment">
<input type="text" name="name" id="name" class="comment" placeholder="Navn" required/> <br> <br>
<textarea type="text" name="comment" id="comment" class="comment" placeholder="Skriv kommentar" rows="5" required></textarea> <br> <br>
<input type="submit" value="Opret kommentar" class="btn pull-left"/>
</form>
</div>
</div><!--/ End comments-row -->
</div><!--/ End news-container -->
</div><!--/ End news row -->
<?php
if (isset($_SESSION['valid_user'])) {
// onClick slet nyhed med alert box
echo '<div class="row-fluid">';
echo ' <div class="pull-left">';
echo ' <a class="btn btn-danger" onclick="deleteNews('. $newsid.')" style="margin-right:20px;">Slet nyhed</a>';
echo ' <a href=update.php?news_id='.$newsid.'&username='. $username .' class="btn btn-info">Updater nyhed</a>';
echo ' <br><br><br><br>';
echo ' </div>';
echo '</div>';
}
?>
<hr>
<?php
//End foreach
}
?>
여기서 그룹을 사용하지 않고 개별 레코드를 가져옵니다. 그러나 이런 식으로 원한다면 : 왜 'GROUP_CONCAT (comments_tbl.comments_id)'를 별도로 만들지 않겠습니까? – Wrikken
그럼 GROUP_CONCAT없이 어떻게 할 수 있습니까? 나는 다른 JOINS를 시도했지만 GROUP_CONCAT없이 작업 할 수는 없으므로 각 뉴스 및 첨부 된 모든 주석을 표시 할 수 있습니다. 단 하나의 주석이나 중복을 얻을 수 있으며 여전히 개별적으로 ID를 얻습니다. 주석 - 삭제를위한 것입니다. – user1906437