Kom ihåg mig?
Home Menu

Menu


Hjälp med SQL-rad

Ämnesverktyg Visningsalternativ
Oläst 2011-02-07, 09:01 #1
Skatan Skatan är inte uppkopplad
Medlem
 
Reg.datum: Apr 2007
Inlägg: 182
Skatan Skatan är inte uppkopplad
Medlem
 
Reg.datum: Apr 2007
Inlägg: 182
Standard 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.
Skatan är inte uppkopplad   Svara med citatSvara med citat
Oläst 2011-02-07, 10:08 #2
coredevs avatar
coredev coredev är inte uppkopplad
Bara ett inlägg till!
 
Reg.datum: Sep 2007
Inlägg: 1 554
coredev coredev är inte uppkopplad
Bara ett inlägg till!
coredevs avatar
 
Reg.datum: Sep 2007
Inlägg: 1 554
Vilken databas kör du?
coredev är inte uppkopplad   Svara med citatSvara med citat
Oläst 2011-02-07, 10:15 #3
emilvs avatar
emilv emilv är inte uppkopplad
Bara ett inlägg till!
 
Reg.datum: Feb 2004
Inlägg: 1 564
emilv emilv är inte uppkopplad
Bara ett inlägg till!
emilvs avatar
 
Reg.datum: Feb 2004
Inlägg: 1 564
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;
emilv är inte uppkopplad   Svara med citatSvara med citat
Oläst 2011-02-07, 11:04 #4
jonny jonny är inte uppkopplad
Supermoderator
 
Reg.datum: Sep 2003
Inlägg: 6 941
jonny jonny är inte uppkopplad
Supermoderator
 
Reg.datum: Sep 2003
Inlägg: 6 941
Eller

Kod:
SELECT * FROM tabell1
WHERE id NOT IN (SELECT id FROM tabell2 WHERE langid=3)
jonny är inte uppkopplad   Svara med citatSvara med citat
Oläst 2011-02-08, 01:47 #5
Skatan Skatan är inte uppkopplad
Medlem
 
Reg.datum: Apr 2007
Inlägg: 182
Skatan Skatan är inte uppkopplad
Medlem
 
Reg.datum: Apr 2007
Inlägg: 182
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 är inte uppkopplad   Svara med citatSvara med citat
Oläst 2011-02-08, 03:10 #6
Skatan Skatan är inte uppkopplad
Medlem
 
Reg.datum: Apr 2007
Inlägg: 182
Skatan Skatan är inte uppkopplad
Medlem
 
Reg.datum: Apr 2007
Inlägg: 182
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.
Skatan är inte uppkopplad   Svara med citatSvara med citat
Oläst 2011-02-08, 07:25 #7
emilvs avatar
emilv emilv är inte uppkopplad
Bara ett inlägg till!
 
Reg.datum: Feb 2004
Inlägg: 1 564
emilv emilv är inte uppkopplad
Bara ett inlägg till!
emilvs avatar
 
Reg.datum: Feb 2004
Inlägg: 1 564
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. :-)
emilv är inte uppkopplad   Svara med citatSvara med citat
Oläst 2011-02-08, 11:17 #8
Conny Westh Conny Westh är inte uppkopplad
Klarade millennium-buggen
 
Reg.datum: Aug 2005
Inlägg: 5 166
Conny Westh Conny Westh är inte uppkopplad
Klarade millennium-buggen
 
Reg.datum: Aug 2005
Inlägg: 5 166
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.

Senast redigerad av Conny Westh den 2011-02-08 klockan 11:19
Conny Westh är inte uppkopplad   Svara med citatSvara med citat
Svara


Aktiva användare som för närvarande tittar på det här ämnet: 1 (0 medlemmar och 1 gäster)
 

Regler för att posta
Du får inte posta nya ämnen
Du får inte posta svar
Du får inte posta bifogade filer
Du får inte redigera dina inlägg

BB-kod är
Smilies är
[IMG]-kod är
HTML-kod är av

Forumhopp


Alla tider är GMT +2. Klockan är nu 06:56.

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