Avatar billede Sinox Nybegynder
18. september 2012 - 12:49 Der er 5 kommentarer og
1 løsning

SQL - INNER JOIN

Jeg er ved at lave en bette søgefunktion med er stødt ind i et problem.

Jeg har 2 tabeller

sinox_product
sinox_product_phrase


SELECT * from sinox_product where sinox_product.active = 1 AND sinox_product.items LIKE '%" & strKeyword & "%'"

MEN jeg skal have tilkoblet sinox_product_phrase som der også skal søges i - der tænker jeg på INNER JOIN.

INNER JOIN er nem nok at koble på, der er dog et MEN

min tabel med phase, er som det lyder. Sprogversioner.

er sproget eks sat til 'fr" for fransk, skal den søge phraser "langcode = 'fr'"
Det er også lige til

MEN

det er slet ikke sikkert der findes en phrase for et product på langcode = 'fr', og findes det ikke, skal den så tage standardsproget langcode = 'en' som der oprettet.

Hvordan gør man det med INNER JOIN? at tjekke om en row findes, hvis ikke så vælge en anden?

Nogle bud?
Avatar billede garant11 Nybegynder
19. september 2012 - 12:13 #1
LEFT JOIN eller RIGHT JOIN.. :-)
Avatar billede garant11 Nybegynder
19. september 2012 - 12:14 #2
LEFT JOIN henter alle records i venstre tabel selvom der ikke er nogen i højre og omvendt med RIGHT JOIN...
Avatar billede softspot Forsker
24. september 2012 - 12:38 #3
Jeg tænker noget i retning af query på fraser på fransk union med fraser på engelsk, hvor der ikke eksisterer nogen på fransk.

Noget i stil med:

SELECT *
FROM sinox_product sp
INNER JOIN sinox_product_phrase spp on sp.id = spp.productid
WHERE sp.active = 1
AND spp.langcode = ?
AND sp.items LIKE '%' + ? + '%'
AND spp.text LIKE '%' + ? + '%'

UNION

SELECT *
FROM sinox_product sp2
INNER JOIN sinox_product_phrase spp2 on sp2.id = spp2.productid
WHERE sp2.active = 1
AND spp2.langcode = 'en'
AND sp2.items LIKE '%' + ? + '%'
AND spp2.text LIKE '%' + ? + '%'
AND NOT EXISTS (
  SELECT *
  FROM sinox_product_phrase sppInner
  WHERE sppInner.productid = sp2.id
  AND sppInner.langcode = ?
)

Spørgsmålstegnene er pladsholdere for de parametre der skal sendes med til forespørgslen. Parametre skal medsendes i flg. rækkefølge: langcode, strKeyword, strKeyword, strKeyword, strKeyword, langcode.

Hvis du er i tvivl om, hvordan man bruger parameteriserede forespørgsler i ASP + VBScript så kig på min guide (www.eksperten.dk/guide/1250).

Jeg har gjort et par antagelser ifht. kolonnenavne i dine tabeller (id, productid og text), men du kan nok selv se hvad der skal gøres for at rette disse til.
Avatar billede mireigi Novice
10. oktober 2012 - 15:05 #4
Den her gør det samme som den softspot kom med, den fylder blot lidt mindre:

SELECT * FROM
sinox_product SP
INNER JOIN sinox_product_phrase SPP ON SP.Id = SPP.ProductId
WHERE SP.Active = 1
AND SP.Items LIKE '%' + ? + '%'
AND (
    SPP.LangCode = ?
    OR
    (
      (SELECT COUNT (*) FROM sinox_product_phrase WHERE LangCode = ?) = 0
      AND
      SPP.LangCode = 'EN'))0
Avatar billede Sinox Nybegynder
21. april 2013 - 09:29 #5
tak for det - smid et svar
Avatar billede softspot Forsker
21. april 2013 - 19:38 #6
Hvis du mener mig, så her, ellers må du jo afvise det :-)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester