2016-07-19 6 views
0

Ich benutze Drupal, und ich habe nodeaccess Modul. Ich habe viele Aufgaben für einen einzelnen Benutzer. Und ich habe viele Rollen für einen einzelnen Knoten vergeben.Gruppieren nach NID und Ordnen nach Datum mit Gruppen ID Drupal

Ich brauche Ausgabe wie folgt.

a) Sortiert nach Datum (erste Wahl)
b) In dem Datum, um mich von gid

Beispiel zur Gruppe benötigen

Ich habe eine Abfrage

SELECT n.nid, na.gid, UNIX_TIMESTAMP(fav.field_date_posted_value), fav.field_date_posted_value 
FROM node as n 
JOIN nodeaccess AS na ON na.nid = n.nid 
LEFT JOIN field_data_field_date_posted AS fav ON fav.entity_id = n.nid 
ORDER BY fav.field_date_posted_value DESC, n.nid ASC 
LIMIT 10 

Ich habe geschrieben Ergebnis wie folgt:

+-------+-----+-------------------------+ 
| nid | gid | field_date_posted_value | 
+-------+-----+-------------------------+ 
| 12501 | 1 | 2014-12-07    | 
| 12501 | 10 | 2014-12-07    | 
| 12502 | 1 | 2014-12-07    | 
| 12502 | 3 | 2014-12-07    | 
| 12502 | 8 | 2014-12-07    | 
| 12502 | 10 | 2014-12-07    | 
| 12502 | 11 | 2014-12-07    | 
| 12505 | 1 | 2014-05-05    | 
| 12505 | 10 | 2014-05-05    | 
| 12575 | 1 | 2014-12-24    | 
| 12575 | 10 | 2014-12-24    | 
| 12576 | 1 | 2013-05-26    | 
| 12576 | 10 | 2013-05-26    | 
| 12577 | 1 | 2013-05-14    | 
| 12577 | 10 | 2013-05-14    | 
+-------+-----+-------------------------+ 

Aber wann Ich versuche, zu einer Gruppe von wie nid unter

SELECT n.nid, na.gid, UNIX_TIMESTAMP(fav.field_date_posted_value), fav.field_date_posted_value 
FROM node as n 
JOIN nodeaccess AS na ON na.nid = n.nid 
LEFT JOIN field_data_field_date_posted AS fav ON fav.entity_id = n.nid 
GROUP BY n.nid ORDER BY fav.field_date_posted_value DESC, n.nid ASC 
LIMIT 10 

Das Ergebnis es

+-------+-----+-------------------------+ 
| nid | gid | field_date_posted_value | 
+-------+-----+-------------------------+ 
| 12501 | 01 | 2014-12-24    | 
| 12502 | 11 | 2014-12-07    | 
| 12505 | 01 | 2014-12-07    | 
| 12575 | 01 | 2014-05-26    | 
| 12576 | 01 | 2013-05-14    | 
| 12577 | 01 | 2013-05-05    | 
+-------+-----+-------------------------+ 

Aber mein erwartetes Ergebnis

ist
+-------+-----+-------------------------+ 
| nid | gid | field_date_posted_value | 
+-------+-----+-------------------------+ 
| 12501 | 10 | 2014-12-24    | 
| 12502 | 11 | 2014-12-07    | 
| 12505 | 10 | 2014-12-07    | 
| 12575 | 10 | 2014-05-26    | 
| 12576 | 10 | 2013-05-14    | 
| 12577 | 10 | 2013-05-05    | 
+-------+-----+-------------------------+ 

Gibt es eine Möglichkeit, dies zu tun?

Ich möchte mein Ergebnis als Gruppe neu zu ordnen durch nid und nach Datum geordnet (DESC) und Reihenfolge von gid (DESC)

Antwort

1

Sie könnten versuchen, Spalten mit Aggregatfunktionen auf den gid und field_date_posted_value , das ist, was sollte man auf jeden Fall in einer richtigen GROUP BY Abfrage tun:

SELECT n.nid, 
     MAX(na.gid), 
     MAX(fav.field_date_posted_value) 
FROM node AS n 
JOIN nodeaccess AS na 
    ON na.nid = n.nid 
LEFT JOIN field_data_field_date_posted AS fav 
    ON fav.entity_id = n.nid 
GROUP BY n.nid 
ORDER BY fav.field_date_posted_value DESC, 
     n.nid ASC 
LIMIT 10 

Eigentlich, da die nid Spalte scheint perfekt c In Verbindung mit der Spalte field_date_posted_value können Sie möglicherweise in der Lage sein, beide Spalten zu gruppieren, d. h. verwenden Sie dazu:

SELECT n.nid, MAX(na.gid), fav.field_date_posted_value 
FROM ... 
... 
GROUP BY n.nid, fav.field_date_posted_value