19. maj 2013 - 15:08Der er
15 kommentarer og 1 løsning
if med flere SELECT i Mysql
Hejsa, jeg forsøger at hente fra DB, men hvis feltet er tomt skal der søges i en anden tabel, som dette:
$hent_sprog = " IF (SELECT * FROM sprog_system_front WHERE sprog_id = "") SELECT * FROM sprog_system_front WHERE sprog_id = 1 ELSE BEGIN SELECT * FROM sprog_system_front WHERE sprog_id = '".$_SESSION['lang']."' END ";
Men der er en fejl, som nok har med php indpakningen af gøre? Er der nogen bud?
Du siger, at der er en fejl. Så ville det være hjælpsomt, hvis du fortæller hvilken fejl. Får du en fejlmelding, så fortæl hvor den opstår og hvad den siger. Hvis du ikke får nogen fejlmelding, men dit resultat er noget andet end det du forventede, så forklar nærmere.
Men du siger, at der altid er en værdi, et nummer, i $_SESSION['lang'. Du vil selecte den række i tabellen sprog_system_front hvor sprog_id = $_SESSION['lang. Hvis der ikke er nogen sprog_id med denne værdi vil du i stedet selecte den række hvor sprog_id = 1. Er det rigtigt forstået?
Jeg ville tro (men har ikke testet) at det kunne gøres som dette:
$id = $_SESSION['lang']; $result = mysql_query("SELECT * FROM sprog_system_front WHERE sprog_id = $id"); if(!$result) $result = mysql_query("SELECT * FROM sprog_system_front WHERE sprog_id = 1");
Jo, det forstår jeg, men fejlen er at mit select er pakket forkert ind i php.. tror jeg, fejlen er at der er en fejl i select?
men anyway det jeg gerne vil er: jeg har denne DB: sprog_system_front_id | sprog_id | felt1 | felt2 | felt3 1 | 1 | text | text | text 2 | 2 | text | | text 3 | 3 | text | text | text
Når $_SESSION = 2, vil jeg gerne hente data ud med sprog_id=2, men som det ses er felt2 i sprog_id 2 TOMT, derfor skal dette felt erstattes med (samme felt) felt2 dog med sprog_id 1.
Fordi din select er pakket forkert ind i php foreslog jeg, baseret på min forståelse af problemet, at pakke det bedre ind. Men jeg er ikke krystal sikker på, at jeg forstår dig. Hvis nu tabellen er denne:
id sprog_id felt1 felt2 felt3 1 1 tekst1 tekst2 tekst3 2 2 tekst4 tom tekst6 3 3 tekst7 tekst8 tekst9 4 4 tom tekst11 tekst12
Hvis $_SESSION['lang'] = 3, så vil du have udskrevet 3 3 tekst7 tekst8 tekst9. Så meget forstår jeg.
Hvis $_SESSION['lang'] = 2, så konstatere der, at der i rækken med sprog_id = 2 er et tomt felt. Så kan jeg opfatte det du vil på to forskellige måder:
Måde 1: Du vil i stedet have udskrevet rækken hvor sprog_id = 1, altså 1 1 tekst1 tekst2 tekst3? Måde2: Du vil have have udskrevet rækken med sprog_id = 2 undtagen at du vil have det tomme felt erstattet med det tilsvarende felt i sprog_id = 1, altså 2 2 tekst4 tekst2 tekst6? Hvis det sidste er tilfældet, så ønsker du, hvis $_SESSION['lang'] = 4, at få udskrevet 4 4 tekst1 tekst11 tekst12.
Så hvad er det du vil? Måde 1, eller måde 2, eller noget helt tredje?
Den er jeg ikke sikker på jeg kan hjælpe med at løse. (Men nu fik jeg hjulpet med til at få problemstillingen forklaret. Så er der måske andre der kan hjælpe videre.)
arne_v, jeg lytter med og lærer med. COALESCE kendte jeg ikke. (Jeg spottede en tyrkfejl i den tredje COALESCE, skulle have været COALESCE(t.felt3,tdefault.felt3) AS felt3 ).
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.