Reacties bij Nieuws
Dit is de Query:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
<?php function showReacties()
{
global $db;
$sql = 'SELECT com.datum, com.news_id, news.title, COUNT(com.news_id) AS numReactions
FROM ` news_comments` com, `news_news` news
WHERE com.news_id = news.id
GROUP BY com.news_id, news.title
ORDER BY com.datum DESC LIMIT 0,15';
$db->DbQuery( $sql );
echo "<table width='240' border='0' cellspacing='0' cellpadding='0'>\n";
if( $db->DbNumRows() > 0 )
while( $article = $db->DbNextRow() )
{
echo "<tr><td>";
echo "<p class='datumtijd'>" . datumnew($article['datum']) . "<a class='item' href=index.php?archive={$article['news_id']}#reageer'> | {$article['title']} ({$article['numReactions']})</a>";
echo "</td></tr>";
}
else
echo "Kon geen artikelen ophalen $db->DbError()";
echo "</table>\n";
}
?>
{
global $db;
$sql = 'SELECT com.datum, com.news_id, news.title, COUNT(com.news_id) AS numReactions
FROM ` news_comments` com, `news_news` news
WHERE com.news_id = news.id
GROUP BY com.news_id, news.title
ORDER BY com.datum DESC LIMIT 0,15';
$db->DbQuery( $sql );
echo "<table width='240' border='0' cellspacing='0' cellpadding='0'>\n";
if( $db->DbNumRows() > 0 )
while( $article = $db->DbNextRow() )
{
echo "<tr><td>";
echo "<p class='datumtijd'>" . datumnew($article['datum']) . "<a class='item' href=index.php?archive={$article['news_id']}#reageer'> | {$article['title']} ({$article['numReactions']})</a>";
echo "</td></tr>";
}
else
echo "Kon geen artikelen ophalen $db->DbError()";
echo "</table>\n";
}
?>
Dit is de structuur van de comments table:
CREATE TABLE `news_comments` (
`id` int(11) NOT NULL auto_increment,
`news_id` int(11) NOT NULL default '0',
`ip` varchar(15) NOT NULL default '',
`datum` timestamp NULL default CURRENT_TIMESTAMP,
`message` text NOT NULL,
`email` varchar(255) NOT NULL default '',
`name` varchar(255) NOT NULL default '',
UNIQUE KEY `id` (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
Wie-o-wie biedt die helpende hand?
Gewijzigd op 01/01/1970 01:00:00 door Gregory Arthur
Maar daar even
ORDER BY com.datum ASC van
Code (php)
1
2
3
4
5
2
3
4
5
SELECT distinct com.news_id, com.datum, news.title
FROM news_comments AS com, news_news AS news
WHERE com.news_id = news.id
ORDER BY com.datum DESC
LIMIT 15
FROM news_comments AS com, news_news AS news
WHERE com.news_id = news.id
ORDER BY com.datum DESC
LIMIT 15
edit: is nog niet de volledige query maar een opzetje om uit te proberen
Gewijzigd op 01/01/1970 01:00:00 door Jan Koehoorn
is hetzelfde als
Code (php)
1
<?php SELECT com.news_id, com.datum, new.title .. GROUP BY com.news_id, com.datum. new.title ?>
Dit heeft tot gevolg dat door die group by de rows die de laatste reactie bevatten eruit worden gefilterd. Hierdoor werkt ORDER BY (uiteraard) niet meer goed.
Gewijzigd op 01/01/1970 01:00:00 door Gregory Arthur
Ik vraag me af of het precies hetzelfde werkt. Ik heb net even lokaal getest en bij mij lijkt die ORDER BY prima te werken. Heb je hem al uitgetest in jouw situatie?
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<?php
$sql = "
SELECT
com.datum,
com.news_id,
news.title,
COUNT(com.news_id) AS numReactions
FROM
news_comments AS com,
news_news AS news
WHERE
com.news_id = news.id
GROUP BY
com.news_id,
news.title
ORDER BY
com.datum DESC
LIMIT 0,15
";
?>
$sql = "
SELECT
com.datum,
com.news_id,
news.title,
COUNT(com.news_id) AS numReactions
FROM
news_comments AS com,
news_news AS news
WHERE
com.news_id = news.id
GROUP BY
com.news_id,
news.title
ORDER BY
com.datum DESC
LIMIT 0,15
";
?>
De sortering met DESC lijkt mij wel ok (om de 15 laatste resultaten te kunnen pakken), maar als je deze 15 resultaten oplopend (dus ASC) wilt sorteren, moet je met een subquery gaan werken.
Tip: Maak van die TIMESTAMP een DATETIME, is 999 van de 1000 x handiger. En die ene keer dat je echt een timestamp nodig hebt, kun je die aanmaken op basis van de DATETIME. MySQL heeft daar prachtige functies voor, zie hoofdstuk 12.5 van de handleiding.
Ik heb geen idee wat je precies in gedachten had?
@Gregory: heb je de tips van Frank en mij uitgeprobeerd? En wat voor resultaten krijg je dan? Het praat een stuk makkelijker als je meldt wat er gebeurt als je onze voorbeelden uitprobeert.
@ Frank: ik weet niet wat je precies bedoelt. Ik heb geen idee hoe ik een subquery maak.
Thx...
Gregory:
@ Jan: Ja, ik heb alle voorbeelden uitgeprobeerd. Jouw voorbeeld werkte dus niet, zie mijn 3e post.
Thx...
Thx...
Ja, die had ik gelezen. Maar wat was precies het resultaat? Precies hetzelfde als bij je andere query?
Ja! Helaas wel.. Volgens mij is dit een lastige!
Ik ga er nog even op studeren. Wat was eigenlijk je resultaat bij de voorbeeldquery van Frank?
Precies hetzelfde. Maar ik had geen subquery gemaakt, aangezien ik geen flauw idee had hoe die er uit zou moeten zien...