/ 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
MySQL - Subselect
Fra : Jimmy


Dato : 21-04-03 21:24

Hej

MySQL 4.0
Jeg har en tabel med spørgsmål og en tabel med brugeres besvarede spørgsmål.


question
--------
ID
Question

answers
-------
ID
Ref_Question_ID
Ref_User_ID
Answer


Der er adskillige spørgsmål og en bruger skal blot besvare fem tilfædigt
udvalgte af disse.

Det vil sige, at jeg skal hente een række fra tabellen question, hvis ID
*ikke* forefindes i tabellen answers.Ref_Question_ID

Da MySQL jo ikke er så frisk på subselects løber jeg tabellen question
igennem og laver en SELECT på answers.
Denne løkke løber indtil alle question's er igennem eller kriteriet
opfyldes.

Dette er jo ret ineffektivt og jeg vil høre om I kan finde på en bedre
løsning?

Mvh
Jimmy



 
 
Morten Guldager (22-04-2003)
Kommentar
Fra : Morten Guldager


Dato : 22-04-03 06:07

Mon, 21 Apr 2003 at 20:23 GMT Jimmy wrote
>
> MySQL 4.0
> Jeg har en tabel med spørgsmål og en tabel med brugeres besvarede spørgsmål.
>
>
> question
> --------
> ID
> Question
>
> answers
> -------
> ID
> Ref_Question_ID
> Ref_User_ID
> Answer
>
>
> Der er adskillige spørgsmål og en bruger skal blot besvare fem tilfædigt
> udvalgte af disse.

Du har altså flere spørgsmål end end besvarede spørgsmål på kørselstidspunket?

Skal det forstås sådan at du f.eks. har 50 spørgsmål hvordaf 7 brugere allerede
har brugt de 35 første (5 * 7), og vi nu får fat i bruger 8 som skal have 5
_nye_ spørgsmål?

Hvad med noget i retning af: (har ikke lige testet den, så jeg kan have tastet
helt i hegnet)

select question.ID
from question
left join answers
on (question.ID = answers.Ref_Question_ID)
where answers.ID is null
limit 5


/Morten

Jimmy (22-04-2003)
Kommentar
Fra : Jimmy


Dato : 22-04-03 21:05


"Morten Guldager" <spamtrap@mogul.dk> wrote in message
news:slrnba9jf0.trs.spamtrap@linuxine.mogul.dk...
> Mon, 21 Apr 2003 at 20:23 GMT Jimmy wrote
> >
> > MySQL 4.0
> > Jeg har en tabel med spørgsmål og en tabel med brugeres besvarede
spørgsmål.
> >
> >
> > question
> > --------
> > ID
> > Question
> >
> > answers
> > -------
> > ID
> > Ref_Question_ID
> > Ref_User_ID
> > Answer
> >
> >
> > Der er adskillige spørgsmål og en bruger skal blot besvare fem tilfædigt
> > udvalgte af disse.
>
> Du har altså flere spørgsmål end end besvarede spørgsmål på
kørselstidspunket?

Det er ganske muligt.
Dog kan en bruger jo have besvaret dem alle.


> Skal det forstås sådan at du f.eks. har 50 spørgsmål hvordaf 7 brugere
allerede
> har brugt de 35 første (5 * 7), og vi nu får fat i bruger 8 som skal have
5
> _nye_ spørgsmål?

Nej.
Det skal forstås sådan at der er 50 spørgsmål.
En bruger skal besvare et ad gangen (over SMS) og i alt 5.
Det ville være noget hø, om der udsendtes et spørgsmål, som brugeren
allerede havde besvaret een gang før.


Jeg forestiller mig det er noget i retning af den herlige LEFT JOIN to gange
på sig selv med forskellige aliaser.

Roder lige lidt med det.

Tak for hjælpen,
Jimmy



Jimmy (25-04-2003)
Kommentar
Fra : Jimmy


Dato : 25-04-03 17:15


"Morten Guldager" <spamtrap@mogul.dk> wrote in message
news:slrnba9jf0.trs.spamtrap@linuxine.mogul.dk...
> Mon, 21 Apr 2003 at 20:23 GMT Jimmy wrote
> >

> Hvad med noget i retning af: (har ikke lige testet den, så jeg kan have
tastet
> helt i hegnet)
>
> select question.ID
> from question
> left join answers
> on (question.ID = answers.Ref_Question_ID)
> where answers.ID is null
> limit 5


DOHH - Ovenstående virkede naturligvis.

Tror jeg var forhippet på at ville lave min subselect at jeg helt overså
hvor enkelt det kunne løses...

Tak igen

Mvh
Jimmy



Henning Petersen (23-04-2003)
Kommentar
Fra : Henning Petersen


Dato : 23-04-03 21:43

On Mon, 21 Apr 2003 22:23:48 +0200, "Jimmy" <nyhedsgruppe@get2net.dk>
wrote:

> Hej
>
> MySQL 4.0
> Jeg har en tabel med spørgsmål og en tabel med brugeres besvarede spørgsmål.
>
>
> question
> --------
> ID
> Question
>
> answers
> -------
> ID
> Ref_Question_ID
> Ref_User_ID
> Answer
>
>
> Der er adskillige spørgsmål og en bruger skal blot besvare fem tilfædigt
> udvalgte af disse.
>
> Det vil sige, at jeg skal hente een række fra tabellen question, hvis ID
> *ikke* forefindes i tabellen answers.Ref_Question_ID

Der er et eksempel i dokumentationen som burde gøre det.

Det er noget med
   SELECT   question.*
   FROM   question
   LEFT JOIN
      answers
   ON   question.ID = answers.Ref_Question_ID
   WHERE   ISNULL(answers.Ref_Question_ID)   AND
      Ref_User_ID=99

burde lave en liste over alle spørgsmål som bruger 99 _ikke_ hae
svaret på.

Queryen er ikke testet men jeg tror umiddelbart den burde virke.

--
Venlig hilsen / Best regards
   Henning

_H_P_C_o_n_s_u_l_t_ http://www.hpc.dk
Skoletoften 9, Blans http://www.turnsys.dk
DK - 6400 Soenderborg

Jimmy (25-04-2003)
Kommentar
Fra : Jimmy


Dato : 25-04-03 17:16


"Henning Petersen" <henning.petersen.030423@hpc.dk> wrote in message
news:feudavsf5kb4hdtvbejjfjnqjuo1e464fb@4ax.com...
> On Mon, 21 Apr 2003 22:23:48 +0200, "Jimmy" <nyhedsgruppe@get2net.dk>
> wrote:
>

> Der er et eksempel i dokumentationen som burde gøre det.
>
> Det er noget med
> SELECT question.*
> FROM question
> LEFT JOIN
> answers
> ON question.ID = answers.Ref_Question_ID
> WHERE ISNULL(answers.Ref_Question_ID) AND
> Ref_User_ID=99
>
> burde lave en liste over alle spørgsmål som bruger 99 _ikke_ hae
> svaret på.
>
> Queryen er ikke testet men jeg tror umiddelbart den burde virke.


Det gør den skam også.
Tak for det.


Mvh
Jimmy



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

Månedens bedste
Årets bedste
Sidste års bedste