/ 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] Problemer med optælling i anden ta~
Fra : Jesper Stocholm


Dato : 01-06-02 12:57

Jeg har denne SQL-statement, der henter nogle data ud for mig:

SELECT

c.strNumber, c.strName, c.strLanguage As languageFlag,

c.strDescription, c.intType, cc.strLanguage as Language,

c.intScale,strGrade,s.strDesc As GradeScale,
ct.Description as CourseType
FROM

(courses c

inner join coursetypes ct on c.intType = ct.id)

inner join scale s on c.intScale = s.id

inner join countries cc on c.strLanguage = cc.id

Jeg har dog en anden tabel, hvor jeg har listet en række filer, der er
tilgængelige for hvert kursus der ligger i min database.

Jeg kunne derfor godt tænke mig at udvide min SQL, så der for hvert
kursus er et "flag", der viser om der er tilgængelige filer eller ej for
det pågældende kursus.

Jeg har forsøgt at lave det på denne måde:

SELECT

c.strNumber, c.strName, c.strLanguage As languageFlag,

c.strDescription, c.intType, cc.strLanguage as Language,

c.intScale,strGrade,s.strDesc As GradeScale,
ct.Description as CourseType,
IF c.StrNumber IN (SELECT strCourseNumber FROM coursefiles) THEN
'yes' ELSE 'no' END IF as FilesAvailable
FROM

(courses c

inner join coursetypes ct on c.intType = ct.id)

inner join scale s on c.intScale = s.id

inner join countries cc on c.strLanguage = cc.id


men det virker ikke ... hvordan kan jeg kringle den ? Jeg ville nødigt
foretage endnu et "opkald" til min server for at få disse informationer
serveret.

:)
--
Jesper Stocholm
http://stocholm.dk
http://asp.stocholm.dk
Svar til gruppen og ikke til mig privat pr. email :|

 
 
Jakob Andersen (01-06-2002)
Kommentar
Fra : Jakob Andersen


Dato : 01-06-02 15:57

Jesper Stocholm wrote:
> SELECT
> c.strNumber, c.strName, c.strLanguage As languageFlag,
> c.strDescription, c.intType, cc.strLanguage as Language,
> c.intScale,strGrade,s.strDesc As GradeScale,
> ct.Description as CourseType
> FROM
> (courses c
> inner join coursetypes ct on c.intType = ct.id)
> inner join scale s on c.intScale = s.id
> inner join countries cc on c.strLanguage = cc.id
> Jeg har dog en anden tabel, hvor jeg har listet en række filer, der er
> tilgængelige for hvert kursus der ligger i min database.
>
> Jeg kunne derfor godt tænke mig at udvide min SQL, så der for hvert
> kursus er et "flag", der viser om der er tilgængelige filer eller ej
> for det pågældende kursus.


Kan du ikke medtage din filtabel i en LEFT JOIN og i det programmeringssprog
der behandler outputtet tjekke for

NULL værdi = ingen filer
Numerisk = filer

Det kunne se sådan her ud(Er lidt usikker på DISTINCT i mySQL):

SELECT DISTINCT
c.strNumber, c.strName, c.strLanguage As languageFlag,
c.strDescription, c.intType, cc.strLanguage as Language,
c.intScale,strGrade,s.strDesc As GradeScale,
ct.Description as CourseType
FROM
(courses c
inner join coursetypes ct on c.intType = ct.id)
inner join scale s on c.intScale = s.id
inner join countries cc on c.strLanguage = cc.id
left join coursefiles cf on c.StrNumber = cf.strCourceNumber

--
Jakob Andersen



Jesper Stocholm (01-06-2002)
Kommentar
Fra : Jesper Stocholm


Dato : 01-06-02 19:38

Jakob Andersen wrote in news:adanc9$p21$1@sunsite.dk:

> Jesper Stocholm wrote:
[snip
>> Jeg kunne derfor godt tænke mig at udvide min SQL, så der for hvert
>> kursus er et "flag", der viser om der er tilgængelige filer eller ej
>> for det pågældende kursus.
>
> Kan du ikke medtage din filtabel i en LEFT JOIN og i det
> programmeringssprog der behandler outputtet tjekke for
>
> NULL værdi = ingen filer
> Numerisk = filer
>
[snip]

joeh ... det kunne jeg sådan set godt ... men det giver mig jo ifølge
mine teste en meget større mængde data at skulle overføre fra min db til
min applikation. Hvis jeg fx til et fag har 10 filer, så vil jeg med en
LEFT JOIN få en række for hver fil i mit recordset ... og det var jo
ikke meningen :)

Jeg går ud fra, at problemet (igen) ligger i mySQLs manglende
understøttelse af sub-selects ?

PS: sproget er i øvrigt C# ... hvis du ikke skulle have gættet det :)

--
Jesper Stocholm
http://stocholm.dk
http://asp.stocholm.dk
Svar til gruppen og ikke til mig privat pr. email :|

Jakob Andersen (01-06-2002)
Kommentar
Fra : Jakob Andersen


Dato : 01-06-02 19:59

Jesper Stocholm wrote:
> joeh ... det kunne jeg sådan set godt ... men det giver mig jo ifølge
> mine teste en meget større mængde data at skulle overføre fra min db
> til min applikation. Hvis jeg fx til et fag har 10 filer, så vil jeg
> med en LEFT JOIN få en række for hver fil i mit recordset

Det var derfor jeg havde en DISTINCT med.

> Jeg går ud fra, at problemet (igen) ligger i mySQLs manglende
> understøttelse af sub-selects ?

Det var også det første jeg tænkte da jeg så dit indlæg:

"Hvorfor bruger han ikke bare en subselect"

Men nej

> PS: sproget er i øvrigt C# ... hvis du ikke skulle have gættet det :)



--
Jakob Andersen



Jesper Stocholm (01-06-2002)
Kommentar
Fra : Jesper Stocholm


Dato : 01-06-02 20:15

Jakob Andersen wrote in news:adb5h8$5m5$1@sunsite.dk:

> Jesper Stocholm wrote:
>> joeh ... det kunne jeg sådan set godt ... men det giver mig jo ifølge
>> mine teste en meget større mængde data at skulle overføre fra min db
>> til min applikation. Hvis jeg fx til et fag har 10 filer, så vil jeg
>> med en LEFT JOIN få en række for hver fil i mit recordset
>
> Det var derfor jeg havde en DISTINCT med.

aah ... jeg koksede lidt rundt i det ... :) ... som jeg kan se det, så
manglede der et udtræk fra tabellen med filerne i, og det forvirrede mig
lidt. Jeg prøvede så at trække fil-navnet ud ... men det giver mig jo x
antal forskellige rækker, da hver fil jo har sit eget navn :)

Jeg prøvede nu med

SELECT DISTINCT
c.strNumber, c.strName, c.strLanguage As languageFlag,
c.strDescription, c.intType, cc.strLanguage as Language,
c.intScale,strGrade,s.strDesc As GradeScale,
ct.Description as CourseType, cf.strCourseNumber
FROM
(courses c
inner join coursetypes ct on c.intType = ct.id)
inner join scale s on c.intScale = s.id
inner join countries cc on c.strLanguage = cc.id
left join coursefiles cf on c.StrNumber = cf.strCourseNumber

.... og det virker perfekt !

>> Jeg går ud fra, at problemet (igen) ligger i mySQLs manglende
>> understøttelse af sub-selects ?
> Det var også det første jeg tænkte da jeg så dit indlæg:
> "Hvorfor bruger han ikke bare en subselect"
> Men nej

ditto ...

>> PS: sproget er i øvrigt C# ... hvis du ikke skulle have gættet det :)
>
>
>

:)

--
Jesper Stocholm
http://stocholm.dk
http://asp.stocholm.dk
Svar til gruppen og ikke til mig privat pr. email :|

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

Månedens bedste
Årets bedste
Sidste års bedste