Avatar billede repsac Nybegynder
27. august 2003 - 16:28 Der er 11 kommentarer og
1 løsning

SELECT t1.noget ORDER BY t2.noget, men der bliver for "mange" res

Hej,

Her er så et problem jeg ikke sådan liiige kan greje, men måske du kan?

Jeg har to (ja, reelt set tre, men det er ligegyldigt med den sidste) tabeller, hvor jeg gerne vil SELECT'e indhold fra begge tabeller, men hvor jeg maksimalt har een af hver af een type (DISTINCT) og samtidig ordne efter (ORDER BY) noget fra den anden tabel som der er flere af.

Uoverskueligt? Jeg prøver med min forespørgsel og forklarer hvad jeg får, og hvad jeg gerne vil have.


SELECT
  t1.id,
  t1.navn,
FROM
  tabel_nr_1 AS t1,
  tabel_nr_2 AS t2
WHERE (
    t2.reference_til_t1id = t1.id,
  AND
    t2.dato > NOW(),
)
ORDER BY
  t2.dato, /* Her går det "galt"... */
  t1.id;

Det jeg gerne vil er at ordne efter t2.dato, men da der er mange flere rækker i t2, kommer der et resultat for hver af t2's rækker...


To eksempler:
http://fnof.dyndns.dk/vs/www/kurser/index.php (uden order by dato)
http://fnof.dyndns.dk/vs/www/kurser/index2.php (med order by dato)


Håber på lidt assistance fra dig :-)
På forhånd tak.
Avatar billede repsac Nybegynder
27. august 2003 - 16:29 #1
Hov, SQL'en er kun et eksempel, så der har indsneget sig en mindre tastefejl, nemlig det komma der er efter t1.navn og efter NOW()...
Avatar billede repsac Nybegynder
27. august 2003 - 16:30 #2
Pfth, desuden skulle det også være SELECT DISTINCT t1.id.
Avatar billede repsac Nybegynder
27. august 2003 - 16:36 #3
Hm, har på fornemmelsen at jeg ikke fik forklaret det ordentligt... prøver at udvidde lidt, også fordi den php-side laver noget "ekstra"...

Direkte C&P:
====================================================
mysql> select distinct kf.id, left(kf.navn, 10) as navn , kf.max_deltagere, kf.standby, kf.kursusgange, l.lokation from kurser_kursus as kf, kurser_admin_lokationer as l, kurser_kursusgange as kg where (kf.lokation = l.id and kg.kursus = kf.id and mod(kf.deleted, 2) = 0) order by kg.dato, kf.id;
+----+------------+---------------+---------+-------------+----------+
| id | navn      | max_deltagere | standby | kursusgange | lokation |
+----+------------+---------------+---------+-------------+----------+
|  2 | Gør dig pa |          127 |      34 |          2 | Århus    |
|  2 | Gør dig pa |          127 |      34 |          2 | Århus    |
|  1 | Læsekursus |            10 |      2 |          4 | Århus    |
|  1 | Læsekursus |            10 |      2 |          4 | Århus    |
|  1 | Læsekursus |            10 |      2 |          4 | Århus    |
|  1 | Læsekursus |            10 |      2 |          4 | Århus    |
+----+------------+---------------+---------+-------------+----------+
6 rows in set (0.01 sec)

mysql> select distinct kf.id, left(kf.navn, 10) as navn , kf.max_deltagere, kf.standby, kf.kursusgange, l.lokation from kurser_kursus as kf, kurser_admin_lokationer as l, kurser_kursusgange as kg where (kf.lokation = l.id and kg.kursus = kf.id and mod(kf.deleted, 2) = 0) order by kf.id;
+----+------------+---------------+---------+-------------+----------+
| id | navn      | max_deltagere | standby | kursusgange | lokation |
+----+------------+---------------+---------+-------------+----------+
|  1 | Læsekursus |            10 |      2 |          4 | Århus    |
|  2 | Gør dig pa |          127 |      34 |          2 | Århus    |
+----+------------+---------------+---------+-------------+----------+
2 rows in set (0.00 sec)

mysql>
====================================================

Jeg vil gerne nøjes med at have de to resultater, som når jeg ikke ordner efter t2.dato, men jeg vil gerne ordne efter t2.dato...
Avatar billede repsac Nybegynder
27. august 2003 - 16:40 #4
Avatar billede detox Nybegynder
27. august 2003 - 16:45 #5
Jeg kan ikke se nogen forskel på de to link.
Avatar billede detox Nybegynder
27. august 2003 - 16:47 #6
Prøv at udskifte DISTINCT med GROUP BY t1.id
Avatar billede detox Nybegynder
27. august 2003 - 16:50 #7
Altså:

select kf.id, left(kf.navn, 10) as navn , kf.max_deltagere, kf.standby, kf.kursusgange, l.lokation from kurser_kursus as kf, kurser_admin_lokationer as l, kurser_kursusgange as kg where (kf.lokation = l.id and kg.kursus = kf.id and mod(kf.deleted, 2) = 0) GROUP BY kf.id order by kf.id;
Avatar billede repsac Nybegynder
27. august 2003 - 16:52 #8
aHA

mysql> select distinct kf.id, left(kf.navn, 10) as navn , kf.max_deltagere, kf.standby, kf.kursusgange, l.lokation from kurser_kursus as kf, kurser_admin_lokationer as l, kurser_kursusgange as kg where (kf.lokation = l.id and kg.kursus = kf.id and mod(kf.deleted, 2) = 0) group by kg.id order by kg.dato, kg.id;
Avatar billede repsac Nybegynder
27. august 2003 - 16:53 #9
Hm, det var, som du skrev, bare lidt group by-pjat...
Avatar billede repsac Nybegynder
27. august 2003 - 16:57 #10
Avatar billede repsac Nybegynder
27. august 2003 - 17:00 #11
Cool bandit :-)

Hit med et svar... ;-)
Avatar billede detox Nybegynder
27. august 2003 - 17:05 #12
Sure c",)
Avatar billede Ny bruger Nybegynder

Din løsning...

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.

Loading billede Opret Preview
Kategori
Computerworld tilbyder specialiserede kurser i database-management

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester