WN

WN (https://www.wn.se/forum/index.php)
-   Serversidans teknologier (https://www.wn.se/forum/forumdisplay.php?f=4)
-   -   Hjälp med SQL-rad (https://www.wn.se/forum/showthread.php?t=1046358)

Skatan 2011-02-07 09:01

Hjälp med SQL-rad
 
Måndagmorgon, står helt still i huvudet:

Jag vill få fram vilka Poster som inte än har översatts till valt språk. Databasen är två tabeller:

Tabell 1
ID


Tabell 2
ID
ParentId
langId
Title

(finns givetvis Tabell 3 innehåller språken)
I Tabell 2 ligger alltså alla poster, markerad med langId och parentId som går till Tabell1 som innehåller den gemensamma data som är språkoberoende.

I SQL vill jag få fram:
Alla poster som inte ännu har översatts till valt språk X.

coredev 2011-02-07 10:08

Vilken databas kör du?

emilv 2011-02-07 10:15

Låter som en OUTER JOIN.

Kod:

SELECT *
FROM tabell1
LEFT OUTER JOIN tabell2
ON tabell2.parentId = tabell1.ID
WHERE tabell2.langId = 1337
AND tabell2.ID IS NULL;


jonny 2011-02-07 11:04

Eller

Kod:

SELECT * FROM tabell1
WHERE id NOT IN (SELECT id FROM tabell2 WHERE langid=3)


Skatan 2011-02-08 01:47

Tyvärr funkar inte ovanstående som jag önskade.
Jag vet inte om det beror på att om en översättning inte är gjord, så finns inte detta post i Tabell2, finns alltså inga NULL?

Så jag måste kanske använda mig av ett standardspråk - som tar fram alla poster på detta standardspråk och jämför vilka som finns med valda språket X.
Hur skulle en sådan sql se ut?
(MySQL)

Skatan 2011-02-08 03:10

Tror faktiskt jag lyckats lösa det med en combo från er båda :)

Kod:

SELECT *
FROM tabell1
LEFT OUTER JOIN tabell2
ON tabell2.parentId = tabell1.ID AND tabell2.langId=Y
WHERE tabell1.id NOT IN (SELECT parentId FROM news_loc WHERE langid=X)

Y = standardspråket
X = Valda språket som jag vill översätta till

Testat med flera olika språkkombinationer i db:n och verkar ta fram det jag vill - ser ni några nackdelar?
Detta skall användas i BACK-END av CMS för språklösning, så inga hevy träffar.

emilv 2011-02-08 07:25

Vid en OUTER JOIN så ska du få träffar även fast raden saknas i den högra tabellen. Mystiskt värre att ingen av lösningarna fungerade då både min och jonnys borde ge rätt svar för det givna problemet.

Är det verkligen rätt att ha langId i ditt join-villkor? Ska inte det ligga i WHERE-klausulen?

Jaja, om det fungerar är det väl bra. :-)

Conny Westh 2011-02-08 11:17

Otestat och fritt ur minnet....

Kod:

SELECT *
FROM tabell2
WHERE langid=Y AND parentid NOT IN (SELECT parentId FROM tabell2 WHERE langid=X)

Glöm inte att sätta index på alla kolumner i WHERE klausulen.


Alla tider är GMT +2. Klockan är nu 08:41.

Programvara från: vBulletin® Version 3.8.2
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Svensk översättning av: Anders Pettersson