Mysql4 Query problem

paolomainardi - October 30, 2008 - 15:27
Project:TagTool
Version:5.x-1.2
Component:Code
Category:bug report
Priority:critical
Assigned:Unassigned
Status:needs review
Description

This query doesn't work in Mysql4: (Group problems)

$result = db_query_range("SELECT t.name, MAX(n.created) FROM {term_data} t INNER JOIN {term_node} r ON r.tid = t.tid INNER JOIN {node} n ON n.nid = r.nid WHERE t.vid = %d GROUP BY r.tid ORDER BY MAX(n.created) DESC", $vid, 0, $num_tags);

Semms for the use of an aggregate functions, MAX in this case, on the WHERE clause (out of SQL standard), so it's possible to remove the MAX on the Order by:

$result = db_query_range("SELECT t.name, MAX(n.created) FROM {term_data} t INNER JOIN {term_node} r ON r.tid = t.tid INNER JOIN {node} n ON n.nid = r.nid WHERE t.vid = %d GROUP BY r.tid ORDER BY MAX(n.created) DESC", $vid, 0, $num_tags);

We have also an Desc order on last created tags.

#1

kardave - November 11, 2008 - 10:14

The bug came up here too.
user warning: Invalid use of group function query: SELECT t.name, MAX(n.created) FROM term_data t INNER JOIN term_node r ON r.tid = t.tid INNER JOIN node n ON n.nid = r.nid WHERE t.vid = 7 GROUP BY r.tid ORDER BY MAX(n.created) DESC LIMIT 0, 10

#2

kardave - November 11, 2008 - 10:26
Status:active» needs review

My working version:
tagtool.module, Line 134

<?php
      $result
= db_query_range("SELECT t.name, MAX(n.created) last_created FROM {term_data} t INNER JOIN {term_node} r ON r.tid = t.tid INNER JOIN {node} n ON n.nid = r.nid WHERE t.vid = %d GROUP BY r.tid ORDER BY last_created DESC", $vid, 0, $num_tags);
?>

 
 

Drupal is a registered trademark of Dries Buytaert.