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

Kodeord


Reklame
Top 10 brugere
ASP
#NavnPoint
smorch 9259
Harlekin 1866
molokyle 1040
Steffanst.. 758
gandalf 657
smilly 564
gibson 560
cumano 530
MouseKeep.. 480
10  Random 410
Hvordan gøres dette smartest...
Fra : Magnus


Dato : 05-02-03 14:33

Jeg har i en MySQL tabel et felt som hedder "malscore" her står fx.
"69,48,79,169" som er id-nr på spillerne som har scoret.

Når jeg udskriver målscorerne bruger jeg funktionen split(malscore,",") til
at adskille de forskellige målscorer.

Men kan jeg ikke gøre det direkte i MySQL så ikke jeg skal gennemløbe alle
poster.

Hvad MySQL sætning kan jeg bruge til at få hentet de poster hvor feltet
"malscore" indeholder spillerens id-nr. Fx. 69 og uden at poster som fx 169,
269, 690 eller lignende tal kommer med?

SQL=....WHERE malscore="69" ???

/Magnus






 
 
Jimmy (05-02-2003)
Kommentar
Fra : Jimmy


Dato : 05-02-03 14:50


"Magnus" <arnason@email.dk> wrote in message
news:b1r3r8$3tr$1@news.cybercity.dk...
> Jeg har i en MySQL tabel et felt som hedder "malscore" her står fx.
> "69,48,79,169" som er id-nr på spillerne som har scoret.
>
> Når jeg udskriver målscorerne bruger jeg funktionen split(malscore,",")
til
> at adskille de forskellige målscorer.


Det er fundamentalt forkert databasedesign, der er skyld i, at du oplever
problemer nu.

En mere korrekt måde at gøre det på er følgende:

kamp
----
ID
Dato
....

spiller
-------
ID
Navn


maal
----
ID
Kamp_ID
Spiller_ID


Tabellen "spiller" populeres med samtlige spillere.

Der oprettes en indgang i tabellen "kamp" for hver kamp der spilles.

For hvert mål en spiller scorer oprettes en indgang i tabellen "maal" med et
Kamp_ID, der refererer til den specifikke kamp og et Spiller_ID, der
refererer til den specifikke spiller.

Nu kan du trække alle de maalscorende spillere ud for hver kamp, for alle
kampe, osv osv.

Jeg er med på det kræver en del omprogrammering fra din side og det ikke var
det svar du ønskede, men du vil helt sikkert opleve mange flere
begrænsninger med dit nuværende "design".

Mvh
Jimmy



Jakob Andersen (05-02-2003)
Kommentar
Fra : Jakob Andersen


Dato : 05-02-03 16:12

"Magnus" <arnason@email.dk> wrote
> Jeg har i en MySQL tabel et felt som hedder "malscore" her står fx.
> "69,48,79,169" som er id-nr på spillerne som har scoret.

Som Jimmy ganske rigtigt siger så er det et ret uhensigsmæssigt(mht.
normalisering) databasedesign. Derfor vil min anbefaling klart være at følge
hans råd.

Det du fisker efter er et slags "liste" i din database, hvilket også er
muligt men kræver at alle værdier der kan være i listen er specificeret i
tabeldefinitionen, dette gøres ved datatypen SET.

<http://www.mysql.com/doc/en/SET.html>

og som du nok kan se er det ikke så smart til din løsning.

> Hvad MySQL sætning kan jeg bruge til at få hentet de poster hvor feltet
> "malscore" indeholder spillerens id-nr. Fx. 69 og uden at poster som fx
169,
> 269, 690 eller lignende tal kommer med?
>
> SQL=....WHERE malscore="69" ???

Dette kunne løses ved at lave listen på formen

,<værdi>,<værdi>,<værdi>,<værdi>,

og søge på

WHERE malscore LIKE '%,<værdi>,%'

--
Jakob Andersen



Klaus Ambrass (06-02-2003)
Kommentar
Fra : Klaus Ambrass


Dato : 06-02-03 13:50

"Magnus" <arnason@email.dk> wrote in news:b1r3r8$3tr$1@news.cybercity.dk:

> Jeg har i en MySQL tabel et felt som hedder "malscore" her står fx.
> "69,48,79,169" som er id-nr på spillerne som har scoret.
>
> Når jeg udskriver målscorerne bruger jeg funktionen split(malscore,",")
> til at adskille de forskellige målscorer.
>
> Men kan jeg ikke gøre det direkte i MySQL så ikke jeg skal gennemløbe
> alle poster.
>
> Hvad MySQL sætning kan jeg bruge til at få hentet de poster hvor feltet
> "malscore" indeholder spillerens id-nr. Fx. 69 og uden at poster som fx
> 169, 269, 690 eller lignende tal kommer med?
>
> SQL=....WHERE malscore="69" ???
>
> /Magnus
>


Prøv med:

findID = "69"
minStreng = "12,34,69,70,800"
i = InStr(minStreng, findID)
If i Then
ID = Mid(minStreng, i, Len(findID))
Me.TextBox1.Text = ID
End If


--
Klaus Ambrass

IT - Storstrøms Amt
kam@it.stam.dk

Jimmy (06-02-2003)
Kommentar
Fra : Jimmy


Dato : 06-02-03 14:12


"Klaus Ambrass" <kam@it.stam.dk> wrote in message
news:Xns931A8C3CDCB3Dambrass@212.88.64.226...
> "Magnus" <arnason@email.dk> wrote in news:b1r3r8$3tr$1@news.cybercity.dk:
>
> > Jeg har i en MySQL tabel et felt som hedder "malscore" her står fx.
> > "69,48,79,169" som er id-nr på spillerne som har scoret.
> >
> > Når jeg udskriver målscorerne bruger jeg funktionen split(malscore,",")
> > til at adskille de forskellige målscorer.
> >
> > Men kan jeg ikke gøre det direkte i MySQL så ikke jeg skal gennemløbe
> > alle poster.
> >
> > Hvad MySQL sætning kan jeg bruge til at få hentet de poster hvor feltet
> > "malscore" indeholder spillerens id-nr. Fx. 69 og uden at poster som fx
> > 169, 269, 690 eller lignende tal kommer med?
> >
> > SQL=....WHERE malscore="69" ???
> >
> > /Magnus
> >
>
>
> Prøv med:
>
> findID = "69"
> minStreng = "12,34,69,70,800"
> i = InStr(minStreng, findID)
> If i Then
> ID = Mid(minStreng, i, Len(findID))
> Me.TextBox1.Text = ID
> End If

Hvordan håndterer din kode en minStreng = "12,34,6969,69,1169,70,800" ?

Jeg tror Magnus søgte en SQL-streng og ikke kode-eksempel.
Jakob gav et eksempel, som ville virke fint med det nuværende setup.

Mvh
Jimmy



Klaus Ambrass (10-02-2003)
Kommentar
Fra : Klaus Ambrass


Dato : 10-02-03 10:33

"Jimmy" <nyhedsgruppe@get3_erstat_3_med_2_net.dk> wrote in
news:V9t0a.47$GC7.12@news.get2net.dk:

>
> "Klaus Ambrass" <kam@it.stam.dk> wrote in message
> news:Xns931A8C3CDCB3Dambrass@212.88.64.226...
>> "Magnus" <arnason@email.dk> wrote in
>> news:b1r3r8$3tr$1@news.cybercity.dk:
>>
>> > Jeg har i en MySQL tabel et felt som hedder "malscore" her står fx.
>> > "69,48,79,169" som er id-nr på spillerne som har scoret.
>> >
>> > Når jeg udskriver målscorerne bruger jeg funktionen
>> > split(malscore,",") til at adskille de forskellige målscorer.
>> >
>> > Men kan jeg ikke gøre det direkte i MySQL så ikke jeg skal
>> > gennemløbe alle poster.
>> >
>> > Hvad MySQL sætning kan jeg bruge til at få hentet de poster hvor
>> > feltet "malscore" indeholder spillerens id-nr. Fx. 69 og uden at
>> > poster som fx 169, 269, 690 eller lignende tal kommer med?
>> >
>> > SQL=....WHERE malscore="69" ???
>> >
>> > /Magnus
>> >
>>
>>
>> Prøv med:
>>
>> findID = "69"
>> minStreng = "12,34,69,70,800"
>> i = InStr(minStreng, findID)
>> If i Then
>> ID = Mid(minStreng, i, Len(findID))
>> Me.TextBox1.Text = ID
>> End If
>
> Hvordan håndterer din kode en minStreng = "12,34,6969,69,1169,70,800" ?
>
> Jeg tror Magnus søgte en SQL-streng og ikke kode-eksempel.
> Jakob gav et eksempel, som ville virke fint med det nuværende setup.
>
> Mvh
> Jimmy
>
>
>

Hvis du sætter findID="69," så er der ingen problemer, ellers finder den
bare den første "69" der passer - altså "6969" i din streng.


--
Klaus Ambrass

IT - Storstrøms Amt
kam@it.stam.dk

Jimmy (10-02-2003)
Kommentar
Fra : Jimmy


Dato : 10-02-03 11:48

> >>
> >> Prøv med:
> >>
> >> findID = "69"
> >> minStreng = "12,34,69,70,800"
> >> i = InStr(minStreng, findID)
> >> If i Then
> >> ID = Mid(minStreng, i, Len(findID))
> >> Me.TextBox1.Text = ID
> >> End If
> >
> > Hvordan håndterer din kode en minStreng = "12,34,6969,69,1169,70,800" ?
> >
> > Jeg tror Magnus søgte en SQL-streng og ikke kode-eksempel.
> > Jakob gav et eksempel, som ville virke fint med det nuværende setup.
> >
> > Mvh
> > Jimmy
> >
> >
> >
>
> Hvis du sætter findID="69," så er der ingen problemer, ellers finder den
> bare den første "69" der passer - altså "6969" i din streng.
>

Nej - Hvis du sætter den til "69," vil den matche 6969.
Sætter du den til ",69," vil den i ovennævnte streng finde den korrekte
spiller.

Men hvad med strengen "12,34,6969,69" ?

Man kan blive ved med at udtænke situationer, hvor din metode vil fejle, da
det grundlæggende databasedesign er forkert.

Mvh
Jimmy



Søg
Reklame
Statistik
Spørgsmål : 177560
Tips : 31968
Nyheder : 719565
Indlæg : 6408946
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste