2016-05-06 12 views
-1

Ich habe eine Tabelleum, indem Sie auf mysql durch Zählung einer Spalte

tid item 
1 k1 
1 k1 
1 k1 
1 k2 
1 k2 
2 k1 
2 k3 
3 k2 
3 k1 
3 k4 

ich es von insgesamt Artikel bestellen möchten, so k1 5 Mal erscheinen ,, als k2 erscheinen 3-mal, k3 und k4 einmal. Ich möchte es mit tid asc bestellen und den Artikel desc zählen.

ich diese Abfrage versucht,

SELECT * 
FROM `tes2` 
order by count(id_item) desc 

Aber es gibt nur 1 Zeile.

tid item 
1 k1 

Wie erhalten Sie alle Daten?

eine Ausgabe, die ich will, ist wie diese

tid item 
    1 k1 
    1 k1 
    1 k1 
    1 k2 
    1 k2 
    2 k1 
    2 k3 
    3 k1 
    3 k2 
    3 k4 

seine so von der Anzahl der bestellten Artikel.

+0

try – Mojtaba

+0

MIT verwenden Bitte geben Sie Ihre Frage mit einem Tisch gewünschte Ausgabe. – trincot

+0

@trincot ich füge es bereits hinzu, thx man .. –

Antwort

1

Sie können dies tun, indem Sie eine Unterabfrage mit der Zählung für jedes Element zu bekommen und dann, dass auf Punkt auf die Haupttabelle an, damit Sie durch Zählung bestellen können. Unten ist MSSQL, aber Sie sollten diese Lösung in Ihrer MySQL-Abfrage verwenden können.

den Test einrichten -

DECLARE @Test TABLE 
( 
    tid int, 
    tem VARCHAR(5) 
) 

INSERT into @Test (tid, item) VALUES (1, 'k1'); 
INSERT into @Test (tid, item) VALUES (1, 'k1'); 
INSERT into @Test (tid, item) VALUES (1, 'k1'); 
INSERT into @Test (tid, item) VALUES (1, 'k2'); 
INSERT into @Test (tid, item) VALUES (1, 'k2'); 
INSERT into @Test (tid, item) VALUES (2, 'k1') 
INSERT into @Test (tid, item) VALUES (2, 'k3'); 
INSERT into @Test (tid, item) VALUES (3, 'k2'); 
INSERT into @Test (tid, item) VALUES (3, 'k1'); 
INSERT into @Test (tid, item) VALUES (3, 'k4'); 

Abfrage -

SELECT t.tid,t.item 
FROM @Test t 
JOIN (SELECT t2.Item, COUNT(*) AS ItemCount FROM @Test t2 GROUP BY t2.Item) counts ON counts.Item = t.Item 
ORDER BY counts.ItemCount DESC, t.tid ASC 

OUTPUT -

tid item 
    1 k1 
    1 k1 
    1 k1 
    2 k1 
    3 k1 
    1 k2 
    1 k2 
    3 k2 
    2 k3 
    3 k4 
+0

Dies ist die richtige Lösung..OP möchte auch von tid asc bestellen. – cableload

+0

kann ich eine Ausgabe machen, die ich will , ohne eine temporäre Tabelle zu erstellen? –

+0

natürlich ist die Temp-Tabelle nur für das Beispiel da. Verwenden Sie die von mir gepostete Abfrage und tauschen Sie @Test mit Ihrer Tabelle aus. – Tom

0

versuchen Sie dies:

SELECT count(id_item), field1, field2, field3 
FROM `tes2` 
order by 0 desc 
Verwandte Themen