/ Forside / Teknologi / Udvikling / SQL / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
SQL
#NavnPoint
pmbruun 1704
niller 962
fehaar 730
Interkril.. 701
ellebye 510
pawel 510
rpje 405
pete 350
gibson 320
10  smorch 260
Muligvis JOIN i MySQL...
Fra : Morten Blinksbjerg N~


Dato : 18-01-01 13:15

Hej,

Jeg har tre tabeller: hh_aktiviteter, hh_aktiviteter_tider og hh_billeder.

hh_aktivitet indeholder tre rækker med, med navn, korttekst og id.

Tabellerne hh_aktivitet_tider og hh_billeder indeholder et felt parent der
svarer til id nummeret fra hh_aktivitet.

Det er til et motionscenter, hvor _hh_aktivitet er aktiviteterne og
hh_aktivitet_tider er tidspunkterne for aktiviteter, og hh_billeder er
billeder fra aktiviteterne.

Jeg vil gerne have listet noget ud der ligner:

+----+---------+--------------------------+-------+----------+
| id | navn | korttekst | tider | billeder |
+----+---------+--------------------------+-------+----------+
| 1 | Spinner | Cykling... | 13 | 0 |
+----+---------+--------------------------+-------+----------+
| 2 | Aerobic | Folk der hopper rundt... | 1 | 1 |
+----+---------+--------------------------+-------+----------+
| 3 | Rulleskøjter | Folk med hjul på benene... | 1 | 0 |
+----+---------+--------------------------+-------+----------+

Altså en liste over aktiviteter, og hvor mange billeder og tidspunkter der
er registreret for aktiviteten.

Indtil videre har jeg lavet:

mysql> select hh_aktivitet.id, hh_aktivitet.navn, hh_aktivitet.korttekst,
count(hh_aktivitet_tider.start) as tider, count(hh_billeder.id) as
billeder from hh_billeder, hh_aktivitet, hh_aktivitet_tider where
hh_aktivitet.id = hh_aktivitet_tider.parent and hh_aktivitet.id =
hh_billeder.parent
group by hh_aktivitet.navn;

Men det giver kun resultaterne hvis der er tider og billeder:

+----+---------+--------------------------+-------+----------+
| id | navn | korttekst | tider | billeder |
+----+---------+--------------------------+-------+----------+
| 2 | Aerobic | Folk der hopper rundt... | 1 | 1 |
+----+---------+--------------------------+-------+----------+
1 row in set (0.01 sec)

Er det nogen der ved hvordan det laves så der kommer et '0' hvis der ikke er
nogen billeder eller tider?

Det er ikke nødvendigt at den returnerer antallet, jeg skal bare vide om der
er billeder eller tider.

--
Morten Blinksbjerg Nielsen
http://www.mbn.dk/



 
 
Morten Blinksbjerg N~ (18-01-2001)
Kommentar
Fra : Morten Blinksbjerg N~


Dato : 18-01-01 15:32

Hvis jeg laver en:

mysql> select hh_aktivitet.id, hh_aktivitet.navn,
if(hh_aktivitet_tider.parent = hh_aktivitet.id, 1, 0) as tider,
if(hh_billeder.parent = hh_aktivitet.id, 1, 0) as billeder from
hh_aktivitet, hh_aktivitet_tider, hh_billeder group by hh_aktivitet.id;

Så returnerer MySQL:

+----+--------------+-------+----------+
| id | navn | tider | billeder |
+----+--------------+-------+----------+
| 1 | Spinner | 1 | 0 |
| 2 | Aerobic | 0 | 1 |
| 3 | Rulleskøjter | 0 | 0 |
+----+--------------+-------+----------+

Det passer fint med billedet, da der kun er et billede ved aerobic, men der
er tider for alle tre punkter, og ikke kun spinner...

Anyone?

--
Morten Blinksbjerg Nielsen
http://www.mbn.dk/



Morten Blinksbjerg N~ (18-01-2001)
Kommentar
Fra : Morten Blinksbjerg N~


Dato : 18-01-01 18:58

Jeg fik løsningen af Hroi:

SELECT
hh_aktivitet.id, hh_aktivitet.navn,
hh_aktivitet.korttekst,
count(hh_aktivitet_tider.start) as tider,
count(hh_billeder.id) as billeder
FROM
hh_aktivitet
LEFT JOIN hh_billeder ON hh_aktivitet.id = hh_billeder.parent
LEFT JOIN hh_aktivitet_tider ON hh_aktivitet.id = hh_aktivitet_tider.parent
GROUP BY hh_aktivitet.id;

Hvis der er nogen der har et lignende problem :)

--
Morten Blinksbjerg Nielsen
http://www.mbn.dk/



Nis Jørgensen (03-02-2001)
Kommentar
Fra : Nis Jørgensen


Dato : 03-02-01 18:16

On Thu, 18 Jan 2001 17:58:18 GMT, "Morten Blinksbjerg Nielsen" <usenet@mbn.dk>
wrote:

>Jeg fik løsningen af Hroi:
>
>SELECT
> hh_aktivitet.id, hh_aktivitet.navn,
> hh_aktivitet.korttekst,
> count(hh_aktivitet_tider.start) as tider,
> count(hh_billeder.id) as billeder
>FROM
> hh_aktivitet
>LEFT JOIN hh_billeder ON hh_aktivitet.id = hh_billeder.parent
>LEFT JOIN hh_aktivitet_tider ON hh_aktivitet.id = hh_aktivitet_tider.parent
>GROUP BY hh_aktivitet.id;
>
>Hvis der er nogen der har et lignende problem :)

Læg mærke til at ovenstående ikke giver det korrekte antal tider og billeder,
hvis der findes begge dele.

--
Med venlige hilsner

Nis Jørgensen, Albertslund

Actual code behavior may differ from intended.

Kristian Damm Jensen (05-02-2001)
Kommentar
Fra : Kristian Damm Jensen


Dato : 05-02-01 09:29


"Nis Jørgensen" wrote:
>
> On Thu, 18 Jan 2001 17:58:18 GMT, "Morten Blinksbjerg Nielsen" <usenet@mbn.dk>
> wrote:
>
> >Jeg fik løsningen af Hroi:
> >
> >SELECT
> > hh_aktivitet.id, hh_aktivitet.navn,
> > hh_aktivitet.korttekst,
> > count(hh_aktivitet_tider.start) as tider,
> > count(hh_billeder.id) as billeder
> >FROM
> > hh_aktivitet
> >LEFT JOIN hh_billeder ON hh_aktivitet.id = hh_billeder.parent
> >LEFT JOIN hh_aktivitet_tider ON hh_aktivitet.id = hh_aktivitet_tider.parent
> >GROUP BY hh_aktivitet.id;
> >
> >Hvis der er nogen der har et lignende problem :)
>
> Læg mærke til at ovenstående ikke giver det korrekte antal tider og billeder,
> hvis der findes begge dele.

Eh? Hvorfor ikke det?

Så vidt jeg husker sorterer count null's fra, når der angives en
eksplicit kolonne.

--
Kristian Damm Jensen | Feed the hungry. Go to
kristian-damm.jensen@capgemini.dk | http://www.thehungersite.com



Nis Jørgensen (06-02-2001)
Kommentar
Fra : Nis Jørgensen


Dato : 06-02-01 00:44

On Mon, 05 Feb 2001 08:28:54 GMT, Kristian Damm Jensen
<kristian-Damm.Jensen@REMOVEcapgemini.dk> wrote:

>
>> >Jeg fik løsningen af Hroi:
>> >
>> >SELECT
>> > hh_aktivitet.id, hh_aktivitet.navn,
>> > hh_aktivitet.korttekst,
>> > count(hh_aktivitet_tider.start) as tider,
>> > count(hh_billeder.id) as billeder
>> >FROM
>> > hh_aktivitet
>> >LEFT JOIN hh_billeder ON hh_aktivitet.id = hh_billeder.parent
>> >LEFT JOIN hh_aktivitet_tider ON hh_aktivitet.id = hh_aktivitet_tider.parent
>> >GROUP BY hh_aktivitet.id;
>> >
>> >Hvis der er nogen der har et lignende problem :)
>>
>> Læg mærke til at ovenstående ikke giver det korrekte antal tider og billeder,
>> hvis der findes begge dele.
>
>Eh? Hvorfor ikke det?
>
>Så vidt jeg husker sorterer count null's fra, når der angives en
>eksplicit kolonne.

Hvis du har n rækker i hh_aktivitet_tider og m rækker i hh_billeder (med samme
parent) får du n * m rækker i resultatet af ovenstående join. Alle disse har
ikke-null-værdier i de felter der bliver optalt på. Eksempel:

hh_aktivitet:

id navn
-- ----
1 foo
2 bar
3 affe

hh_aktivitet_tider:

parent start
------ -----
1 nu
1 i går
3   nu
3   i går

hh_billeder:

parent id
------ -----
2 42
2 43
3   44
3   45

Giver følgende resultat før grupperingen:

id navn start billed
-- ---- ----- ------
1 foo nu NULL
1 foo i går NULL
2 bar NULL 42
2 bar NULL 43
3 affe nu 44
3 affe nu 45
3 affe i går 44
3 affe i går 45

Med gruppering (+count) fås nu

id navn tider billeder
-- ---- ----- --------
1 foo 2 0
2 bar 0 2
3 affe 4 4

--
Med venlige hilsner

Nis Jørgensen, Albertslund

Actual code behavior may differ from intended.

Kristian Damm Jensen (06-02-2001)
Kommentar
Fra : Kristian Damm Jensen


Dato : 06-02-01 10:24

"Nis Jørgensen" wrote:
>
> On Mon, 05 Feb 2001 08:28:54 GMT, Kristian Damm Jensen
> <kristian-Damm.Jensen@REMOVEcapgemini.dk> wrote:
>
> >
> >> >Jeg fik løsningen af Hroi:
> >> >
> >> >SELECT
> >> > hh_aktivitet.id, hh_aktivitet.navn,
> >> > hh_aktivitet.korttekst,
> >> > count(hh_aktivitet_tider.start) as tider,
> >> > count(hh_billeder.id) as billeder
> >> >FROM
> >> > hh_aktivitet
> >> >LEFT JOIN hh_billeder ON hh_aktivitet.id = hh_billeder.parent
> >> >LEFT JOIN hh_aktivitet_tider ON hh_aktivitet.id = hh_aktivitet_tider.parent
> >> >GROUP BY hh_aktivitet.id;
> >> >
> >> >Hvis der er nogen der har et lignende problem :)
> >>
> >> Læg mærke til at ovenstående ikke giver det korrekte antal tider og billeder,
> >> hvis der findes begge dele.
> >
> >Eh? Hvorfor ikke det?
> >
> >Så vidt jeg husker sorterer count null's fra, når der angives en
> >eksplicit kolonne.
>
> Hvis du har n rækker i hh_aktivitet_tider og m rækker i hh_billeder (med samme
> parent) får du n * m rækker i resultatet af ovenstående join. Alle disse har
> ikke-null-værdier i de felter der bliver optalt på.

Rigtigt. Mea culpa.

<snip>

--
Kristian Damm Jensen | Feed the hungry. Go to
kristian-damm.jensen@capgemini.dk | http://www.thehungersite.com



Søg
Reklame
Statistik
Spørgsmål : 177518
Tips : 31968
Nyheder : 719565
Indlæg : 6408647
Brugere : 218887

Månedens bedste
Årets bedste
Sidste års bedste