所有
我正在尝试显示作者的最新帖子。
帖子在一个表中,作者在另一个表中。使用的查询是:加入名为content_id的列,我正在尝试使用MAX(item_date),这是帖子发布的日期。
以下是我正在运行的一些查询和输出,除了所有作者的最新帖子外,我似乎得到了所有内容:
首先(这一点有效)我们需要获取有关作者的信息:
$query="SELECT content_id, title, source_image, url FROM content_detail where approved='y'";
$result1 = $mysqli->query($query) or die($mysqli->error.__LINE__);
// GOING THROUGH THE DATA
if($result1->num_rows > 0) {
while($fetch=mysqli_fetch_array($result1)) {
$title=$fetch['title'];
$feed_rss=$fetch['url'];
$content_id=$fetch['content_id'];
$source_image=$fetch['source_image'];
现在,在此基础上,让我们得到帖子,第1轮:
$query2 = "SELECT item_id, item_title, MAX(item_date) as item_date from posts WHERE content_id='$content_id' GROUP BY content_id";
$result2 = $mysqli->query($query2) or die($mysqli->error.__LINE__);
if($result2->num_rows > 0) {
while($rows2=mysqli_fetch_array($result2)) {
$item_id = $rows2['item_id'];
$item_title = $rows2['item_title'];
$item_date = $rows2['item_date']; `
这会收回一组有趣的结果,即作者发表的最新日期,但不是最新的标题!
我尝试过GROUP BY item_title和content_id无济于事。
以下内容只回溯了数据库中有多个日期的记录,问题是(因为这是新的)一些作者只有一个帖子,这些都没有显示:
$query2 = "SELECT item_id, item_title, item_date FROM posts AS a WHERE content_id = content_id AND item_date = (
SELECT MAX(item_date)
FROM rssingest AS b
)
";
我试过了:
ORDER BY DATE DESC LIMIT 1
在我的查询结束时无济于事。
item_date是表格中的DATE类型。
非常感谢任何帮助!
谢谢,
答案 0 :(得分:1)
您需要将自己的帖子表连接到自己,以便只抓取每个content_id的最新帖子(我相信是作者)。
$query2 = "SELECT posts.item_id, posts.item_title, posts.item_date from posts
join (select max(item_id) max_id, content_id from posts group by content_id) maxid
on maxid.content_id=posts.content_id and maxid.max_id=posts.item_id
WHERE content_id='$content_id' ";
这为进一步优化打开了大门。你可以在一次运行中抓住作者和他们的最后一篇文章。
SELECT content_detail.content_id,
content_detail.title,
content_detail.source_image,
content_detail.url ,
posts.item_id,
posts.item_title,
posts.item_date
FROM content_detail
join posts on content_detail.content_id=posts.content_id
join (select max(item_id) max_id, content_id from posts group by content_id) maxid
on maxid.content_id=posts.content_id and maxid.max_id=posts.item_id
where content_detail.approved='y'
但这可能是夸大其词。你当然应该自己尝试一下:)
答案 1 :(得分:1)
您正在运行此查询以获取最长日期:
SELECT item_id, item_title, MAX(item_date) as item_date
from posts
WHERE content_id = '$content_id'
GROUP BY content_id;
当然你没有得到正确的item_title
。它没有在group by
子句中提及,也没有聚合函数。因此,您正在使用MySQL扩展(此查询将在其他数据库中失败)。
您可以使用substring_index()
/ group_concat()
技巧获取最新的标题:
SELECT max(item_id),
substring_index(group_concat(item_title separator '|' order by item_date desc), '|', 1) as last_title,
MAX(item_date) as item_date
from posts
WHERE content_id = '$content_id'
GROUP BY content_id;
这将返回一行。但是,如果只有一行,你可以这样做:
SELECT p.*
from posts p
WHERE p.content_id = '$content_id'
ORDER BY item_date desc
LIMIT 1;
如果添加group by
语句,则会推广以前的版本。