2010-04-10 4 views
0

J'ai déjà passé une journée entière sur ce sujet sans le savoir. J'espère que quelqu'un peut me aider à traduire la requête MySQL suivante pour travailler pour SQL Server 2005:J'ai besoin d'une requête conçue pour MySQL traduite pour travailler pour SQL Server 2005

SELECT MAX (messages.date) AS maxdate, 
topics.id AS topicid, topics.*, users.* 
FROM messages, topics, users WHERE messages.topic_id 
= topics.id AND topics.user_id = users.id AND 
topics.forum_id = " . $forumid . " GROUP BY 
messages.topic_id ORDER BY maxdate DESC 

ForumID $ est une valeur QueryString définie dans le code suivant VB.NET code-behind:

forumName.Text = "<a href='ViewForum.aspx?forumid=" & row.id & "'>" & row.name & "</a>" 

Je serais très reconnaissant si vous pouvez aider.

Répondre

1

Il y a deux problèmes. Tout d'abord, comme l'a souligné Andomar, vous ne pouvez pas faire référence aux alias de colonnes dans ORDER BY. Deuxièmement, si vous effectuez une agrégation (comme le MAX), vous ne pouvez pas sélectionner des champs qui ne sont pas dans le GROUP BY sauf s'ils sont agrégés aussi.

Je pense que c'est ce que vous voulez:

SELECT m.maxdate, t.*, u.* 
FROM (
    SELECT topic_id, MAX(messages.date) AS maxdate 
    FROM messages 
    GROUP BY topic_id 
) AS m 
    INNER JOIN topics t ON t.id = m.topic_id 
    INNER JOIN users u ON t.user_id = u.id 
WHERE t.forum_id = " . $forumid . " 
ORDER BY m.maxdate DESC 
+0

qui fonctionne !! Merci beaucoup. – brookmarker

1

SQL Server ne vous permet pas de faire référence à des alias de colonne dans un order by (au moins 2005 n'a pas.) Si vous remplacez la commande par avec:

ORDER BY MAX (messages.date) 

Vous devriez être un peu plus de une requête SQL Server 2005 en cours de fonctionnement.

Questions connexes