02. april 2008 - 18:34Der er
17 kommentarer og 1 løsning
1 fra `table1` og 5 fra `table2`
Hej eksperter,
Det jeg leder efter er en query som for hver række hentet fra `table1`, henter 5 relaterede rækker fra `table2`. Så vidt jeg ved findes der ingen limits på joins, så den går ikke.
Teknologi, AI og forretning er i centrum på Computerworlds Cloud og AI Festival i København d. 18. og 19. september. Se hele programmet for den store konference om strategisk brug af Cloud og AI på: www.cloud-festival.dk
Hej Arne, det ligner da noget. Jeg har desværre ikke mulighed for at teste det før i morgen tidlig, men hvis du kan kigge herind en gang i morgen, så vil jeg have et svar klart.
mysql> SELECT * FROM t1; +----+------+ | F1 | F2 | +----+------+ | 1 | A | | 2 | BB | | 3 | CCC | +----+------+ 3 rows in set (0.00 sec)
mysql> SELECT * FROM t1 a JOIN t1 b ON a.f1=b.f1; +----+------+----+------+ | F1 | F2 | F1 | F2 | +----+------+----+------+ | 1 | A | 1 | A | | 2 | BB | 2 | BB | | 3 | CCC | 3 | CCC | +----+------+----+------+ 3 rows in set (0.00 sec)
mysql> SELECT * FROM t1 a JOIN (SELECT * FROM t1 b ORDER BY f1 LIMIT 2) x ON a.f1=x.f1; +----+------+----+------+ | F1 | F2 | F1 | F2 | +----+------+----+------+ | 1 | A | 1 | A | | 2 | BB | 2 | BB | +----+------+----+------+ 2 rows in set (0.00 sec)
SELECT * FROM _Categories c JOIN ( SELECT * FROM _Categories isc WHERE isc.parentc = c.id ORDER BY isc.name LIMIT 3 ) sc ON sc.parentc = c.id WHERE c.id = 1
Denne forespørgsel returnerer "Unknown column 'c.id' in 'where clause'". Hvordan kan dette gøres? Jeg kan jo ikke hente alle rækker fra tabellen ud.
Ja den virker fint, det var også den jeg prøvede først.
Problemet med den er bare at jeg jo henter alle rækkerne ud, i min "inner-query", og det tvivler jeg på er særligt sundt for serveren hvis det skal gøres ofte og databasen har 100,000 rækker.
Jeg antager at MySQL er smart nok til kun at hente de 3 foerste raekker og ikke henter alle og saa smider alt undtagen de 3 vaek naar man har en LIMIT 3.
Det forudsaetter naturligvis at der er index paa isc.name !!
Når jeg siger "hente ud", menes der ikke returnere alle rækkerne, men at den læser hele _Categories-tabellen når jeg laver min inner-select.
Jeg ved ikke hvordan SQL-databasen virker, men jeg forstår dette: "(SELECT * FROM _Categories isc ORDER BY isc.name LIMIT 3) sc ON sc.parentc = c.id" Som at den læser hele _Categories, og så vælger den så derefter de rækker ud som passer på min ON-statement.
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.