/ 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
Udtræk fra MySQL db
Fra : -Martin-


Dato : 09-01-02 20:23

hejsa database nørder =)

Jeg har en mysql database med et par tabeller i ..

Spørgsmålet lyder
Hvordan henter jeg den k_id der er flest af i svar_konkurrence ?
Altså:

Hvis 10 har svaret 3 og 9 har svaret 2 (hvordan får jeg så den med
svar 3 ud?)

den ene tabel er følgende

konkurrence
id (primær nøgle) (INT)
question (Longtext)
svar1 (longtext)
svar2 (longtext)
svar3 (longtext)
svar4 (longtext)
svar5 (longtext)

og den anden tabel

svar_konkurrence
id (primær nøgle (INT)
navn (varchar(50) )
k_id (INT) *sætter id fra konkurrence.id*
svar *enten 1,2,3,4 eller 5*
hvorfor (longtext)

PS: Er der nogen gode argumenter for hvordan jeg bedre kan opbygge
mine tabeller?

 
 
Nis Jorgensen (10-01-2002)
Kommentar
Fra : Nis Jorgensen


Dato : 10-01-02 10:16

On Wed, 09 Jan 2002 20:23:01 +0100, -Martin- <admin@natten-i.dk>
wrote:

>hejsa database nørder =)
>
>Jeg har en mysql database med et par tabeller i ..
>
>Spørgsmålet lyder
>Hvordan henter jeg den k_id der er flest af i svar_konkurrence ?
>Altså:
>
>Hvis 10 har svaret 3 og 9 har svaret 2 (hvordan får jeg så den med
>svar 3 ud?)

Hmmm + normalt ville jeg bruge en subquery, men siden mySQL ikke kan
det, så ville jeg prøve:

SELECT k_ID
GROUP BY k_ID
ORDER BY count(*) DESC
LIMIT 1

(bemærk dog: Hvad sker der hvis to k_id har samme hyppighed?)

--
Nis Jorgensen
Amsterdam

Please include only relevant quotes, and reply below the quoted text. Thanks

Kristian Damm Jensen (10-01-2002)
Kommentar
Fra : Kristian Damm Jensen


Dato : 10-01-02 11:03



-Martin- wrote:
>
> hejsa database nørder =)
>
> Jeg har en mysql database med et par tabeller i ..
>
> Spørgsmålet lyder
> Hvordan henter jeg den k_id der er flest af i svar_konkurrence ?
> Altså:
>
> Hvis 10 har svaret 3 og 9 har svaret 2 (hvordan får jeg så den med
> svar 3 ud?)
>
> den ene tabel er følgende
>
> konkurrence
> id (primær nøgle) (INT)
> question (Longtext)
> svar1 (longtext)
> svar2 (longtext)
> svar3 (longtext)
> svar4 (longtext)
> svar5 (longtext)
>
> og den anden tabel
>
> svar_konkurrence
> id (primær nøgle (INT)
> navn (varchar(50) )
> k_id (INT) *sætter id fra konkurrence.id*
> svar *enten 1,2,3,4 eller 5*
> hvorfor (longtext)

select *
from svar_konkurrence
where k_id = (select max(k_id) from svar_konkurrence)

eller

select *
from svar_konkurrence
having k_id = max(k_id)

Det sidste er enklere og mere logisk, men vil i mange tilfælde ikke
fungere pga. den måde forespørgslen implementeres.

--
Kristian Damm Jensen | Feed the hungry at www.thehungersite.com
kristian-damm.jensen@cgey.dk | Two wrongs doesn't make a right,
ICQ# 146728724 | but three lefts do.


Nis Jorgensen (10-01-2002)
Kommentar
Fra : Nis Jorgensen


Dato : 10-01-02 21:25

On Thu, 10 Jan 2002 11:02:57 +0100, Kristian Damm Jensen
<kristian-damm.jensenRE@MOVEcgey.com> wrote:

>
>select *
> from svar_konkurrence
> where k_id = (select max(k_id) from svar_konkurrence)

Er "standard-metoden - men jeg er ikke sikker på om mySQL kan finde ud
af den.

>eller
>
>select *
> from svar_konkurrence
> having k_id = max(k_id)
>
>Det sidste er enklere og mere logisk, men vil i mange tilfælde ikke
>fungere pga. den måde forespørgslen implementeres.

Først og fremmest virker det ikke fordi det ikke er korrekt SQL.

--
Nis Jorgensen
Amsterdam

Please include only relevant quotes, and reply below the quoted text. Thanks

Kristian Damm Jensen (11-01-2002)
Kommentar
Fra : Kristian Damm Jensen


Dato : 11-01-02 09:34

Nis Jorgensen wrote:
>
> On Thu, 10 Jan 2002 11:02:57 +0100, Kristian Damm Jensen
> <kristian-damm.jensenRE@MOVEcgey.com> wrote:
>
> >
> >select *
> > from svar_konkurrence
> > where k_id = (select max(k_id) from svar_konkurrence)
>
> Er "standard-metoden - men jeg er ikke sikker på om mySQL kan finde ud
> af den.
>
> >eller
> >
> >select *
> > from svar_konkurrence
> > having k_id = max(k_id)
> >
> >Det sidste er enklere og mere logisk, men vil i mange tilfælde ikke
> >fungere pga. den måde forespørgslen implementeres.
>
> Først og fremmest virker det ikke fordi det ikke er korrekt SQL.

Hvorfor mener du ikke, at der er korrekt SQL?


--
Kristian Damm Jensen | Feed the hungry at www.thehungersite.com
kristian-damm.jensen@cgey.dk | Two wrongs doesn't make a right,
ICQ# 146728724 | but three lefts do.


Nis Jorgensen (11-01-2002)
Kommentar
Fra : Nis Jorgensen


Dato : 11-01-02 11:16

On Fri, 11 Jan 2002 09:33:55 +0100, Kristian Damm Jensen
<kristian-damm.jensenRE@MOVEcgey.com> wrote:

>
>> >select *
>> > from svar_konkurrence
>> > having k_id = max(k_id)
>> >
>> >Det sidste er enklere og mere logisk, men vil i mange tilfælde ikke
>> >fungere pga. den måde forespørgslen implementeres.
>>
>> Først og fremmest virker det ikke fordi det ikke er korrekt SQL.
>
>Hvorfor mener du ikke, at der er korrekt SQL?

På grund af referencen til k_id i HAVING-klausulen. HAVING virker på
en grupperet tabel, i dette tilfælde betragtes hele tabellen som een
gruppe fordi der ikke er nogen GROUP BY. Altså kan HAVING ikke se k_id
feltet for de enkelte rækker.

Kender du nogen databaseprodukter som accepterer din forespørgsel, og
i givet fald hvilke?

--
Nis Jorgensen
Amsterdam

Please include only relevant quotes, and reply below the quoted text. Thanks

Kristian Damm Jensen (11-01-2002)
Kommentar
Fra : Kristian Damm Jensen


Dato : 11-01-02 15:38

Nis Jorgensen wrote:
>
> On Fri, 11 Jan 2002 09:33:55 +0100, Kristian Damm Jensen
> <kristian-damm.jensenRE@MOVEcgey.com> wrote:
>
> >
> >> >select *
> >> > from svar_konkurrence
> >> > having k_id = max(k_id)
> >> >
> >> >Det sidste er enklere og mere logisk, men vil i mange tilfælde ikke
> >> >fungere pga. den måde forespørgslen implementeres.
> >>
> >> Først og fremmest virker det ikke fordi det ikke er korrekt SQL.
> >
> >Hvorfor mener du ikke, at der er korrekt SQL?
>
> På grund af referencen til k_id i HAVING-klausulen. HAVING virker på
> en grupperet tabel, i dette tilfælde betragtes hele tabellen som een
> gruppe fordi der ikke er nogen GROUP BY. Altså kan HAVING ikke se k_id
> feltet for de enkelte rækker.
>
> Kender du nogen databaseprodukter som accepterer din forespørgsel, og
> i givet fald hvilke?

Lad mig sige det sådan: jeg har i al fald tidligere oplevet at Sybase
(version 10) accepterede forespørgslen. (Jeg havde nogle problemer med
at få det til at fungere, men det skyldtes i lige så høj grad, at den
var mere kompleks end ovenstående.)

I samme version af Sybase var det muligt i samme select både at få
enkeltværdierne og den aggregerede værdi.

Og dette burde der teknisk set heller ikke være noget problem i. At den
aggregerede værdi udregnes på baggrund af en gruppe, forhindrer ikke at
de enkelte poster i gruppe kan vises med den aggregerede værdi. Men jeg
vil ikke afvise, at SQL-definition forbyder dette; jeg har ikke
undersøgt det.

--
Kristian Damm Jensen | Feed the hungry at www.thehungersite.com
kristian-damm.jensen@cgey.dk | Two wrongs doesn't make a right,
ICQ# 146728724 | but three lefts do.


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

Månedens bedste
Årets bedste
Sidste års bedste