Ich programmiere ein News-Update-System mit Kommentaren. Ich habe drei Tische.Wie lösche ich einzelne Zeilen von einem GROUP_CONCAT?
news_tbl
users_tbl
(Autoren Neuigkeiten Beiträge)comments_tbl
(mit einem Fremdschlüssel verbunden - news_id)
ich versucht habe zwei Methoden mit und ohne GROUP_CONCAT
.
Ich habe dies versucht:
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;
Es funktioniert, aber ich kann den ersten schriftlichen Kommentar nur angezeigt werden, aber ich möchte alle Kommentare angezeigt wird, auf die Nachricht Update angebracht.
Ich habe auch GROUP_CONCAT
für die Kommentare verwendet, so dass es keine Duplikate der Nachricht geben wird, für jeden der Kommentare. Ich bin mir nicht sicher, ob es die richtige Methode ist, aber es funktioniert.
Mein Problem ist, ich habe ein Login-System, und ich möchte der Benutzer in der Lage sein, die Kommentare einzeln löschen, mit einem Lösch-Taste für jeden von ihnen. Aber ich weiß nicht, wie ich die Kommentare einzeln trennen und die ID von jedem Kommentar holen soll. Ich habe es mit der PHP explode
versucht, aber es hat nicht für mich funktioniert.
Dies ist mein Code:
<?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
}
?>
Ich würde hier keine Gruppe verwenden, sondern nur die einzelnen Datensätze abrufen. Wie auch immer, wenn du es so willst: Warum nicht ein separates 'GROUP_CONCAT (comments_tbl.comments_id)'? – Wrikken
Nun, wie würde ich es dann tun, ohne die GROUP_CONCAT? Ich habe verschiedene JOINS ausprobiert, aber ohne GROUP_CONCAT konnte ich nicht funktionieren, so dass ich alle Nachrichten und alle Kommentare anzeigen kann, ich würde nur einen Kommentar bekommen, oder Duplikate, und trotzdem hätte ich keine individuellen IDs bekommen Kommentare - um sie zu löschen. – user1906437