2016-11-04 4 views
-2

Ich habe eine Tabelle, in der ich 9 Rückgaben abfragen muss, von denen jedes von einer zufälligen Reihenfolge jedes Mal sein muss, sie können außer einem Wert von TYPE X nicht duplizieren. Das Problem ist, dass wenn Sie verwenden GROUP BY, es gibt nur 8 Ergebnisse zurück, aber ich benötige 9, wobei 2 Ergebnisse denselben TYPE-Wert haben.MYSQL SELECT NACH GRUPPE

Der Entwurf der Abfrage, die ich bisher gewesen verwendet haben: „FROM * SELECT (SELECT * FROM Fragen ORDER BY RAND()) R GROUP BY-Typ;

// Tabelle entfernt, Formatierungs- nicht berufstätig, . IMAGE STATT

MySQL Table

+1

Ihre Frage doesn Es macht keinen Sinn. Was ist "X"? Was kann nicht dupliziert werden? –

+0

Wenn Sie nur 8 verschiedene 'critical_thinking_id'-Werte haben, können Sie keine 9 verschiedenen Werte haben. –

+0

Formatierung funktioniert gut für Millionen anderer Fragen. Dein Bild ist völlig nutzlos. –

Antwort

0

Wenn Sie zufällige Reihen von Gruppen in MySQL holen wollen, ich denke, der sicherste Weg ist, Variablen verwenden Dies ist die Reihenfolge:

select q.* 
from (select q.*, 
      (@rn := if(@q = questionid, @rn + 1, 
         if(@q := questionid, 1, 1) 
         ) 
      ) as rn 
     from questions q cross join 
      (select @q := 0, @rn := 0) params 
     order by questionid, rand() 
    ) q 

Dann haben Sie 8 Fragen, wenn Sie wissen, aber sie 2 aus dem zweiten wollen:

where rn = 1 or (questionid = 2 and rn = 2) 

Oder, wenn Sie 9 zufällige Fragen als nicht-überlappende wie möglich wollen:

order by rn 
limit 9 
+0

Ich bin nicht sicher, wie die WHERE-Klausel in es kommt, wie die q einen Fehler zurückgibt. – Nnaut

+0

@Nnaut. . . Das sollte "bezweifelt" werden. –

+0

Die Spalten in meiner Tabelle sind: ID, Frage, Critical_Thinking_ID, also was meinst du mit Frage – Nnaut