2009-07-23 12 views
1

Was ist der beste Weg, um eine Unterliste von Dingen zu bekommen?Der effizienteste Weg, Listen zu bekommen?

Ich habe zwei Tabellen:

create table A (
    id int primary key 
) 

create table B (
    id int primary key, 
    aid int foreign key references A(id), 
    sort_key int 
) 

ich eine Liste von Objekten A, mit Subobjekte B erhalten möchten, aber nur die besten fünf von B.

Sagen wir, ein Volk ist, und B ist Art von Essen, mit sort_key ist, wie viel eine Person dieses Essen mag. Wie bekomme ich alle (oder einige Leute) und ihre Top 5 Essen?

Antwort

2

Auf dem vorherigen Kommentar, wenn es ein INT ist nicht Sie nicht Numerik dort setzen können.

Unter der Annahme, die folgenden Daten:

a 
-- 
id 
1 
2 
3 

b 
------------------------ 
id aid sort_key 
1 1  1 
2 1  2 
3 2  1 
4 3  1 
5 1  3 
6 1  4 
7 1  5 
8 1  6 
9 2  2 
10 2  3 

Die folgende Abfrage in MySQL würden Sie diese:

SELECT a.*, 
    (SELECT GROUP_CONCAT(id) AS ids FROM b AS bi WHERE bi.aid = a.id ORDER BY sort_key LIMIT 5) AS ids 
FROM a 

Ergebnis:

id ids 
1 1,2,5,6,7,8 
2 3,9,10 
3 4 
+0

hast du irgendwo einen Tippfehler (id = 1 hat 6 IDs) aber danke! Das ist eigentlich sehr nah an dem, was ich brauche! – Timmy

1

Diese Abfrage übernimmt der Sortierschlüssel ist eine Basis, anstatt Null:

SELECT a.name 
     b.food 
    FROM A a 
    JOIN B b ON b.aid = a.id 
    WHERE b.sortkey <= 5 
ORDER BY a.name, b.sortkey 
+0

danke, aber sort_key könnte alles sein, und nicht nummeriert, obwohl ich die Daten vorverarbeiten kann, um so etwas zu tun. – Timmy

+0

Sie hätten Probleme, Daten zu setzen, die nicht numerisch sind, basierend auf Ihrer Modellierung - derzeit ist die Spalte ein int;) –

+0

Entschuldigung, ich meine nicht nicht-numerisch, aber nicht streng 1,2,3,4,5, was erscheint Um Ihre Logik zu sein – Timmy

Verwandte Themen