distinct wil niet sorteren
Ik heb een forum en wil de topic titels van de laatste 5 geplaatste berichten laten zien, een beetje als Laatste forum berichten op phphulp.
Nu heb ik deze functie:
Het werkt op zich wel, want hij laat alleen maar unieke topic titels zien. Maar het sorteren klopt totaal niet. De langst geleden post komt bovenaan, als 2de de kortst geleden, en die er tussenin ligt als 3de, de volgorde klopt dus van geen kant. Weet iemand wat ik verkeerd doe?
Nu heb ik deze functie:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<?php
function laatsteforum() {
$sql = "SELECT distinct TopicID FROM berichten ORDER BY Datum DESC LIMIT 5";
$query = mysql_query($sql);
$returner = array();
while($result = mysql_fetch_array($query)) {
$sql2 = "SELECT Naam FROM topics WHERE TopicID = ".$result['TopicID'];
$query2 = mysql_query($sql2);
$object = mysql_fetch_object($query2);
$tekst = $object->Naam;
if(strlen($tekst) > 30) {
$tekst = substr($tekst,0,27).'...';
}
$returner[] = array("Topic" => $result['TopicID'], "Tekst" => $tekst);
}
return $returner;
}
?>
function laatsteforum() {
$sql = "SELECT distinct TopicID FROM berichten ORDER BY Datum DESC LIMIT 5";
$query = mysql_query($sql);
$returner = array();
while($result = mysql_fetch_array($query)) {
$sql2 = "SELECT Naam FROM topics WHERE TopicID = ".$result['TopicID'];
$query2 = mysql_query($sql2);
$object = mysql_fetch_object($query2);
$tekst = $object->Naam;
if(strlen($tekst) > 30) {
$tekst = substr($tekst,0,27).'...';
}
$returner[] = array("Topic" => $result['TopicID'], "Tekst" => $tekst);
}
return $returner;
}
?>
Het werkt op zich wel, want hij laat alleen maar unieke topic titels zien. Maar het sorteren klopt totaal niet. De langst geleden post komt bovenaan, als 2de de kortst geleden, en die er tussenin ligt als 3de, de volgorde klopt dus van geen kant. Weet iemand wat ik verkeerd doe?
Gewijzigd op 01/01/1970 01:00:00 door Teun Beijers
Gesponsorde koppelingen:
Hoe heb je je datum gesorteerd? Volgens mij moet je die eerst bewerken
daar ligt het niet aan, want als ik op ID sorteer doe ie precies hetzelfde, en die staat ook op de goede volgorde
Waarom zo moeilijk en niet in een SQL?
SELECT
DISTINCT TopicID, Naam
FROM
berichten,
topics
WHERE
berichten.topicid= topic.topicic
ORDER BY Datum DESC LIMIT 5
Laat me raden datum is een varchar??
Op id sorteren is overigens niet juist een id heeft geen enkele betekenis
SELECT
DISTINCT TopicID, Naam
FROM
berichten,
topics
WHERE
berichten.topicid= topic.topicic
ORDER BY Datum DESC LIMIT 5
Laat me raden datum is een varchar??
Op id sorteren is overigens niet juist een id heeft geen enkele betekenis
@Klaasjan: Datum is bigint.
Als ik jouw manier probeer:
#1052 - Column 'TopicID' in field list is ambiguous
SELECT DISTINCT TopicID, Naam
FROM berichten, topics
WHERE berichten.TopicID = topics.TopicID
ORDER BY Datum DESC
LIMIT 5
EDIT: heb het nu zo opgelost:
SELECT DISTINCT Naam, berichten.TopicID
FROM berichten, topics
WHERE berichten.TopicID = topics.TopicID
ORDER BY berichten.Datum DESC
LIMIT 5
denk dat het zo wel werkt, bedankt!
Als ik jouw manier probeer:
#1052 - Column 'TopicID' in field list is ambiguous
SELECT DISTINCT TopicID, Naam
FROM berichten, topics
WHERE berichten.TopicID = topics.TopicID
ORDER BY Datum DESC
LIMIT 5
EDIT: heb het nu zo opgelost:
SELECT DISTINCT Naam, berichten.TopicID
FROM berichten, topics
WHERE berichten.TopicID = topics.TopicID
ORDER BY berichten.Datum DESC
LIMIT 5
denk dat het zo wel werkt, bedankt!
Gewijzigd op 01/01/1970 01:00:00 door Teun Beijers
teuneboon schreef op 31.01.2009 20:15:
@Klaasjan: Datum is bigint.
Als ik jouw manier probeer:
#1052 - Column 'TopicID' in field list is ambiguous
SELECT DISTINCT TopicID, Naam
FROM berichten, topics
WHERE berichten.TopicID = topics.TopicID
ORDER BY Datum DESC
LIMIT 5
Als ik jouw manier probeer:
#1052 - Column 'TopicID' in field list is ambiguous
SELECT DISTINCT TopicID, Naam
FROM berichten, topics
WHERE berichten.TopicID = topics.TopicID
ORDER BY Datum DESC
LIMIT 5
Dan zijn er 2 velden met de naam TopicID ...
Jasper, zie mijn edit van die post voor je :P
teuneboon schreef op 31.01.2009 20:20:
Jasper, zie mijn edit van die post voor je :P
Goedzo ;p
Het probleem zit hem in het feit dat de datum in een BIGINT zit. Ik neem aan dat je nummers altijd opslaat in een datefield? of in een varchar?
Zet je datum in een DATE of DATETIME en je probleem is opgelost.
Je
Zet je datum in een DATE of DATETIME en je probleem is opgelost.
Je
Is het nog gelukt?
Ja hoor:
SELECT DISTINCT Naam, berichten.TopicID
FROM berichten, topics
WHERE berichten.TopicID = topics.TopicID
ORDER BY berichten.Datum DESC
LIMIT 5
SELECT DISTINCT Naam, berichten.TopicID
FROM berichten, topics
WHERE berichten.TopicID = topics.TopicID
ORDER BY berichten.Datum DESC
LIMIT 5



