20. februar 2008 - 09:23Der er
6 kommentarer og 1 løsning
Beskrivelse på forskellige sprog
Jeg har forsøgt at skitsere mine tabeller nedenfor, med noget simplificeret testdata (- opsætningen bliver sikkert ødelagt, men jeg tror det er muligt at læse alligevel).
Nu vil jeg gerne have alle mine produkter skrevet ud, hvad angår pris og navn. Jeg fortrækker at få beskrivelsen på dansk (32), men hvis ikke der findes en dansk beskrivelse, vil jeg gerne have den engelske (38) (eller vælge en anden (eksempelvis tysk; 26). Altså ønsker jeg at kunne opstille en liste over fortrukne sprog / rækkefølgen af sprog jeg ønsker beskrivelsen på.
Når jeg kører en LEFT JOIN, går det meget langsomt, når databasen indeholder mange produkter. Jeg ved ikke om det vil hjælpe på det, at undlade brugen af LEFT JOIN (?).
Jeg vil selvfølgelig kun have én række per produkt (altså kun ét navn og én pris).
Hvordan skal min SQL se ud, for at hente de ønskede informationer? (Som beskrevet, er ovenstående en meget simplificeret udgave af tabellen - men jeg tror alt det nødvendige er med, til at kunne beskrive problemet,- hvis der mangler informationer, må I endeligt skrive.)
Teknologi, AI og forretning er i centrum på Computerworlds Cloud og AI Festival i København d. 18. og 19. september. Se hele programmet for den store konference om strategisk brug af Cloud og AI på: www.cloud-festival.dk
Prioriteringen af sprogene, er individuel for den enkelte bruger der skal bruge systemetet. Listen har jeg dog - så det er ikke her problemet ligger.
Jeg har forsøgt med med en forespørgsel;
SELECT * FROM `base_product` p, `language_product` l WHERE p.`product_id` = l.`product_id` AND l.`language_id` IN ( SELECT language_id FROM `system_language` WHERE `language_status` = 'active' ORDER BY FIELD(language_id,38,32) ASC ) GROUP BY p.`product_id`
Felterne hedder noget lidt andet, end i eksemplet ovenfor, men det burde være til at oversætte. Sætningen virker dog ikke helt korrekt, idet den ikke joiner tabellerne i forhold til den orden jeg har sat på language_id. Jeg ved ikke om du har en idé?
SELECT * FROM product p JOIN language l1 ON p.product_id=l1.product_id WHERE l1.prioritet = (SELECT MAX(z.prioritet) FROM language l2 JOIN prioritet z ON l2.language=z.language WHERE l2.product_id=l1.product_id)
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.