Reacties bij Nieuws

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Gregory Arthur

Gregory Arthur

12/06/2006 21:13:00
Quote Anchor link
Ik wil de laatste 15 nieuwsberichten hebben (zonder dubbele) gesorteerd op datum vd laatste reactie. Dus 15 titels van nieuwsberichten met daarachter het aantal reacties. Op dit moment worden de berichten gesorteerd op de eerste reactie, wat dus de laatste zou moeten zijn.

Dit is de Query:


Code (php)
PHP script in nieuw venster Selecteer het PHP script
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
<?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";
    }

    ?>


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
 
PHP hulp

PHP hulp

17/11/2024 03:05:33
 
Eris -

Eris -

12/06/2006 21:14:00
Quote Anchor link
ORDER BY com.datum DESC

Maar daar even

ORDER BY com.datum ASC van
 
Gregory Arthur

Gregory Arthur

12/06/2006 21:18:00
Quote Anchor link
Dat heb ik al geprobeerd. Maar in dat geval krijg ik de allereerste berichten eerst, en dan nog selecteert 'ie per individueel bericht alsnog de eerst geposte comment.

Vreemd, hm?
Gewijzigd op 01/01/1970 01:00:00 door Gregory Arthur
 
Jan Koehoorn

Jan Koehoorn

12/06/2006 21:29:00
Quote Anchor link
Ik zou het anders aanpakken:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
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


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
 
Gregory Arthur

Gregory Arthur

12/06/2006 21:33:00
Quote Anchor link
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
<?php SELECT DISTINCT com.news_id, com.datum, new.title..." ?>


is hetzelfde als

Code (php)
PHP script in nieuw venster Selecteer het PHP script
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
 
Jan Koehoorn

Jan Koehoorn

12/06/2006 21:36:00
Quote Anchor link
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?
 
Frank -

Frank -

12/06/2006 21:36:00
Quote Anchor link
Query netjes uitschrijven wil nog wel eens helpen met het overizicht:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
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
"
;
?>


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.
 
Gregory Arthur

Gregory Arthur

12/06/2006 21:43:00
Quote Anchor link
Frank,

Ik heb geen idee wat je precies in gedachten had?
 
Jan Koehoorn

Jan Koehoorn

12/06/2006 21:47:00
Quote Anchor link
@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.
 
Gregory Arthur

Gregory Arthur

12/06/2006 21:53:00
Quote Anchor link
@ Jan: Ja, ik heb alle voorbeelden uitgeprobeerd. Jouw voorbeeld werkte dus niet, zie mijn 3e post.

@ Frank: ik weet niet wat je precies bedoelt. Ik heb geen idee hoe ik een subquery maak.

Thx...
 
Jan Koehoorn

Jan Koehoorn

12/06/2006 22:00:00
Quote Anchor link
Gregory:
@ Jan: Ja, ik heb alle voorbeelden uitgeprobeerd. Jouw voorbeeld werkte dus niet, zie mijn 3e post.
Thx...

Ja, die had ik gelezen. Maar wat was precies het resultaat? Precies hetzelfde als bij je andere query?
 
Gregory Arthur

Gregory Arthur

12/06/2006 22:01:00
Quote Anchor link
Ja! Helaas wel.. Volgens mij is dit een lastige!
 
Jan Koehoorn

Jan Koehoorn

12/06/2006 22:10:00
Quote Anchor link
Ik ga er nog even op studeren. Wat was eigenlijk je resultaat bij de voorbeeldquery van Frank?
 
Gregory Arthur

Gregory Arthur

12/06/2006 22:11:00
Quote Anchor link
Precies hetzelfde. Maar ik had geen subquery gemaakt, aangezien ik geen flauw idee had hoe die er uit zou moeten zien...
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.