Ciao, ammetto tutta la mia ignoranza in materia di query, quindi mi rimetto al verdetto di più competenti di me e vengo al dunque:

Scenario: tabella turni
codice:
USERS_SHIFTS
id   |   date   |   users_id   |  shift_id
1     2012-01-01       1             2 
32    2012-01-01       2             4 
94    2012-01-01       3             4 
125   2012-01-01       4             1 
2     2012-01-02       1             3 
33    2012-01-02       2             2 
95    2012-01-02       3             1 
126   2012-01-02       4             1 
3     2012-01-03       1             1 
34    2012-01-03       2             1 
96    2012-01-03       3             1 
etc etc

Da questa (ed altre su cui faccio delle JOIN) vorrei ottenere una tabella con sulle righe gli utenti ed il relativo turno:

codice:
SELECT * FROM users_shifts as u_s, shifts, users WHERE 
u_s.user_id = users.id AND 
u_s.shift_id = shifts.id AND   
MONTH(u_s.date) = 1 
ORDER BY users.surname ASC, users.name ASC, u_s.date ASC
Con questa ovviamente tiro fuori tutto quello che mi serve, ma in maniera "ingestibile" (ovvero, come atteso, per ogni utente e per ogni giorno del mese avrò una record). L'ideale sarebbe avere un result-set in cui il record sia composto dall'utente e dal turno per ciascun giorno - ovvero qualcosa del genere:
codice:
user_id    2012-01-01    2012-01-02    2012-01-03 ...
  1             2             3            1
  2             4             2            1
etc

devo usare una temporary table? non l'ho mai fatto e vista la mia scarsa dimestichezza con mysql, mi chiedevo se ci fosse una qualche maniera di ottenere dei record raggruppati per utente senza passare per tabelle temporanee (GROUP BY non mi sembra opportuno in quanto mi ritornerebbe un solo record per utente, ovvero quello corrispondente al primo giorno del mese di turno)