/ 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
Omvendt LEFT JOIN?
Fra : J.


Dato : 09-05-02 16:09

Jeg har en tabel med en masse sprog i og en tabel med nogle termer i.
Såfremt termerne findes på pågældende sprog, vil der være en record for den
enkelte term på dette sprog.

Hvis jeg laver denne query:

$sprog = mysql_query( "SELECT Sprog,Kode FROM termsprog LEFT JOIN termtekst
ON termsprog.Kode = termtekst.LANG WHERE termtekst.ID = $ID",$conn) or
die( mysql_error() );

vælger den alle de sprog, som termen findes på.

Hvad nu hvis jeg vil det modsatte, altså at den finder alle de sprog som
termen IKKE findes på? Det er ikke nok at skrive (...) ON termsprog.Kode !=
termtekst.LANG (...), da den så finder sprogene flere gange (en gang for
hver record).

Håber i kan hjælpe!!!

På forhånd tak,

J.




 
 
Jens Gyldenkærne Cla~ (09-05-2002)
Kommentar
Fra : Jens Gyldenkærne Cla~


Dato : 09-05-02 16:37

"J." <test@neovoid.org> skrev:

> $sprog = mysql_query( "SELECT Sprog,Kode FROM termsprog LEFT
> JOIN termtekst
> ON termsprog.Kode = termtekst.LANG WHERE termtekst.ID =
> $ID",$conn) or die( mysql_error() );
>
> vælger den alle de sprog, som termen findes på.

Så vidt jeg kan se vælger du alle poster i termsprog (da du
bruger LEFT JOIN). Hvis du kun har brug for de sprog hvor termen
findes kan du vel benytte INNER JOIN (der er væsentlig mere
effektiv).

> Hvad nu hvis jeg vil det modsatte, altså at den finder alle de
> sprog som termen IKKE findes på?

Det er formentlig et problem med mySQL, da den SVJV ikke
understøtter subselects. I programmer med subselects kan man
skrive:

SELECT Sprog, Kode
FROM termsprog
WHERE Kode NOT IN
   (SELECT Kode
    FROM termtekst
    WHERE ID = $id)

eller

SELECT Sprog, Kode
FROM termsprog
WHERE NOT EXIST
   (SELECT 'true'
    FROM termtekst
    WHERE Kode = termsprog.Kode
    AND id = $id)


Et muligt alternativ er at operere med en bitmaske til at markere
hvilke sprog en term findes på. Hvert sprog tildeles en bitværdi
(1, 2, 4, 8, ...) og termtekst indeholder så et felt der
repræsenterer summen af disse bitværdier. Ud fra bitværdien kan
du altid aflæse hvilke sprog der ligger bag. Hvis du ofte skal
bruge disse aflæsninger kan det måske svare sig at oprette en
tabel med alle bitkombinationer med tilhørende sprog (f.eks.
tbl_bitkombination:
bitValue int, inclSprog varchar, exclSprog varchar)

--
Jens Gyldenkærne Clausen
MF (Medlem af Fiduso - www.fiduso.dk)

J. (09-05-2002)
Kommentar
Fra : J.


Dato : 09-05-02 17:31


"Jens Gyldenkærne Clausen" <gyros@email.dk> wrote in message
news:Xns9209B333CD643jgcnospamget2netdk@212.242.40.196...
> "J." <test@neovoid.org> skrev:
> Det er formentlig et problem med mySQL, da den SVJV ikke
> understøtter subselects. I programmer med subselects kan man
> skrive:
>
> SELECT Sprog, Kode
> FROM termsprog
> WHERE Kode NOT IN
> (SELECT Kode
> FROM termtekst
> WHERE ID = $id)
>
> eller
>
> SELECT Sprog, Kode
> FROM termsprog
> WHERE NOT EXIST
> (SELECT 'true'
> FROM termtekst
> WHERE Kode = termsprog.Kode
> AND id = $id)
>
>
> Et muligt alternativ er at operere med en bitmaske til at markere
> hvilke sprog en term findes på. Hvert sprog tildeles en bitværdi
> (1, 2, 4, 8, ...) og termtekst indeholder så et felt der
> repræsenterer summen af disse bitværdier. Ud fra bitværdien kan
> du altid aflæse hvilke sprog der ligger bag. Hvis du ofte skal
> bruge disse aflæsninger kan det måske svare sig at oprette en
> tabel med alle bitkombinationer med tilhørende sprog (f.eks.
> tbl_bitkombination:
> bitValue int, inclSprog varchar, exclSprog varchar)
>


Hej, og tak for det hurtige svar.

Bitmasken lyder som en interessant løsning, men den er desværre for
tidskrævende for mig P.T. (jeg er under lidt af et tidspres). Er der nogen
anden acceptabel løsning, eventuelt?

Med venlig hilsen,

J.



Jens Gyldenkærne Cla~ (09-05-2002)
Kommentar
Fra : Jens Gyldenkærne Cla~


Dato : 09-05-02 21:03

"J." <test@neovoid.org> skrev:

> Bitmasken lyder som en interessant l›sning, men den er
> desv‘rre for tidskr‘vende for mig P.T. (jeg er under lidt af
> et tidspres). Er der nogen anden acceptabel l›sning,
> eventuelt?

Jo - du kan gøre således:

SELECT s.Sprog, s.Kode
FROM termsprog s LEFT JOIN termtekst t
ON s.Kode = t.LANG
WHERE t.LANG IS NULL

Jeg ved ikke hvorfor jeg ikke tænkte på det før - men det er jo
netop forskellen på en LEFT og en INNER JOIN. Left Join har alle
elementer fra venstre side med - og i de tilfælde hvor der _ikke_
er en matchende række på højre side er værdien på højresidens
joinfelt null.

--
Jens Gyldenkærne Clausen
MF (Medlem af Fiduso - www.fiduso.dk)

J. (09-05-2002)
Kommentar
Fra : J.


Dato : 09-05-02 23:44


"Jens Gyldenkærne Clausen" <gyros@email.dk> wrote in message
news:Xns9209E04BD8CAFjgcnospamget2netdk@212.242.40.196...
> Jo - du kan gøre således:
>
> SELECT s.Sprog, s.Kode
> FROM termsprog s LEFT JOIN termtekst t
> ON s.Kode = t.LANG
> WHERE t.LANG IS NULL
>
> Jeg ved ikke hvorfor jeg ikke tænkte på det før - men det er jo
> netop forskellen på en LEFT og en INNER JOIN. Left Join har alle
> elementer fra venstre side med - og i de tilfælde hvor der _ikke_
> er en matchende række på højre side er værdien på højresidens
> joinfelt null.


Vi er meget, meget tæt på en løsning. Der er bare et krav, vi vist glemte at
få med i forvirringen: Det skal KUN gælde de instanser af termtekst, hvor ID
er lig en vis værdi. Det kan måske udgøre et vist problem, da
WHERE-sætningen kun finder tomme rækker fra termtekst-feltet i det
tilfælde??

Hvis du har en løsning der kan tage ovennævnte i betragtning - og jeg tænker
også selv på livet løs - så sig til, og du gør mig til en meget, meget
lykkelig person.

- J.



J. (10-05-2002)
Kommentar
Fra : J.


Dato : 10-05-02 00:11

Der er en løsning, åbenbart.

To SQL-queries:

CREATE TEMPORARY TABLE t1 SELECT LANG FROM termtekst WHERE ID = $ID GROUP BY
LANG

og derefter

SELECT Sprog,Kode FROM termsprog LEFT JOIN t1 ON termsprog.Kode = t1.LANG
WHERE t1.LANG IS NULL

Det virker, og suverænt endda. Tager måske lidt flere rersourcer end en
løsning i en enkelt query kunne gøre.

Hvis det viser sig at den anden løsning kan modificeres til at virke, er jeg
naturlgvis stadig interesseret dog.

Og uanset hvad, tusind tak for din hjælp so far.

- J.



Nis Jorgensen (13-05-2002)
Kommentar
Fra : Nis Jorgensen


Dato : 13-05-02 13:26

On Fri, 10 May 2002 00:43:54 +0200, "J." <test@neovoid.org> wrote:

>
>"Jens Gyldenkærne Clausen" <gyros@email.dk> wrote in message
>news:Xns9209E04BD8CAFjgcnospamget2netdk@212.242.40.196...
>> Jo - du kan gøre således:
>>
>> SELECT s.Sprog, s.Kode
>> FROM termsprog s LEFT JOIN termtekst t
>> ON s.Kode = t.LANG
>> WHERE t.LANG IS NULL
>>
>> Jeg ved ikke hvorfor jeg ikke tænkte på det før - men det er jo
>> netop forskellen på en LEFT og en INNER JOIN. Left Join har alle
>> elementer fra venstre side med - og i de tilfælde hvor der _ikke_
>> er en matchende række på højre side er værdien på højresidens
>> joinfelt null.
>
>
>Vi er meget, meget tæt på en løsning. Der er bare et krav, vi vist glemte at
>få med i forvirringen: Det skal KUN gælde de instanser af termtekst, hvor ID
>er lig en vis værdi.

Det kan goeres saaledes:

SELECT s.Sprog, s.Kode
FROM termsprog s LEFT JOIN termtekst t
ON s.Kode = t.LANG
AND t.ID = $ID
WHERE t.LANG IS NULL

- men jeg ved ikke om mySQL understoetter det.

--
Nis Jorgensen
Amsterdam

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

Chok Og Underholdnin~ (09-05-2002)
Kommentar
Fra : Chok Og Underholdnin~


Dato : 09-05-02 16:42

Relevante anmeldelser findes på:
http://www.jp.dk/cgi-bin/dbpublish.dll?page=internetavisen/kultur/res/art&art_id=3505270
og:
http://www.berlingske.dk/artikel:aid=131580/


B. Frederiksen <ocean@get2net.dk> skrev
> Dagen før bogen udkom, skrev Kristeligt Dagblad om den:
>
> Det fortælles, at professor Hans Brix engang anmeldte en bog på følgende måde: "Anmelde den bog! Det skulle da være til politiet!"
> Man har lyst til at gentage professoren i anledning af Søren Mosegaards såkaldte roman "Uhyret fra Betlehem", som forekommer at
være
> alvorligt på kant med den lovgivning, der handler om diskrimination...
>
> mvh
> Bent
>
> > > "Chok Og Underholdning" <chok_og_underholdning@hotmail.com> skrev i en
> > > meddelelse
> > > news:1357e9ecbdaa41c9d4804b843add3f26.91160@mygate.mailgate.org...
> > > > Nu kan du på nettet læse første kapitel af den hårdtpumpede kærligheds-
> > > > og spændingsroman om katolsk pædofili, Uhyret fra Betlehem:
> > > > http://home22.inet.tele.dk/snow/1.htm
> > > >
> > > > Det danske gyser-hit, der p.t. er ved at blive oversat til amerikansk,
> > > > udgør litteraturens mest omfattende leksikon over kristendommens
> > > > forbrydelser og fejl -- og danner desuden grundbog for organisationen
> > > > Snow White Foundation.
> > > >
> > > > Snow White Foundation meldte for nylig kirkeminister Tove Fergo til
> > > > Københavns politi for anerkendelsen af den romersk-katolske kirke, hvis
> > > > organisering af pædofile præster strider mod Grundlovens § 67.
> > > >
> > > > Samtidig anlagde amerikanske stjerneadvokater sager mod Vatikanet, hvor
> > > > kirken anklages for organiseret kriminalitet --ligesom i Uhyret fra
> > > > Betlehem! Se http://www.ralawfirm.com/globals/JohnVDoe_HolySee.pdf
> > > >
> > > > Hyg dig med Uhyret, mens du venter på retssagerne i Danmark og USA!
> > > >
> > > > P.S. Læs også det store 4-siders interview med forfatteren i det nye
> > > > nummer af litteratur- og filmtidsskriftet Sentura.
> > > >
> > > >
> > > > --
> > > > Posted via Mailgate.ORG Server - http://www.Mailgate.ORG
> > >
> > >
> >
> >
>
>





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