08. november 2010 - 13:00Der er
14 kommentarer og 2 løsninger
IF i MySQL - jeg tror det er det der skal til?
Hej allesammen,
Jeg er faktisk lidt i tvivl om hvordan det her skal håndteres, og derfor har jeg valgt at sætte overskriften som IF I MYSQL da jeg tror det er sådan det klares, men er ikke sikker.
Jeg vil gerne vise alle mine produkter som har en pris mellem mindste pris og højeste pris. F.eks.
$price_low = 50; $price_high = 100;
SELECT * FROM products WHERE price >= $price_low AND price <= $price_high
Mit problem ligger nu i at der er nogle af produkterne som er på tilbud, og tilbudsprisen ligger i price_discount. Så lad os sige et produkt koster 120 normalt, men er på tilbud til 100, så skal det jo også med i ovenstående. Men hvis den normalt koster 60 og er på tilbud til 45 så skal den jo ikke med.
Så jeg kan ikke engang lave en OR og hive price_discount med :/
Så det jeg vil høre jer eksperter om er følgende: Er det muligt at lave en IF sætning hvor man først checker om der er en price_discount, og hvis true, så skal den tage udgangspunkt i den, ellers i price.
du skal bruge en LEFT OUTER JOIN, og så gøre det at du vælger alle der har en pris der er korrekt i discount. eller har NULL i discount og er korrekt price
jeg læste det som om at price_discount ligger i separat tabel, men hvis det ikke er tilfældet, så giver det som #2 siger ikke meget mening at kigge efter JOIN :-)
mcb2001, beklager jeg ikke fik forklaret mig ordentligt, men den er i samme tabel :)
therealyoda, tak for dit svar, men jeg har desværre allerede prøvet den, ogproblemer ligger her: Vi tager et produkt hvor price er 100 og price_discount er 90 og vi kører med disse to: $price_low = 95; $price_high = 100;
Så viser den stadigvæk det produkt, selvom prisen ikke matcher. 90 er jo ikke mellem 95-100. Det var som jeg nævnte i mit spørgsmål "Så jeg kan ikke engang lave en OR og hive price_discount med :/". Problemet ligger i jo at den checker begge to med en OR, og 100 som er price ligger jo mellem 95-100.
Så det jeg havde forestillet var at der var en IF sætning der første checkede om produktet havde en price_discount, for hvis ikke så skal den kører på price, ellers skal den køre på price_discount. Er det helt sort? :/
WHERE (price_discount = 0 AND (price > price_low AND price < price_high)) OR (price_discount != 0 AND (price_discount > price_low AND price_discount < price_high))
Du er da bare en skatter showsource :) Smid venligst et svar, og i andre må også meget gerne smide et svar så smækker jeg lidt flere i puljen som tak for indsatsen
Ikke fordi jeg vil have pointene .. men fordi jeg er nysgerrig efter om der er noget jeg misser ..
jeg forstår ikke rigtigt forskellen på
WHERE (price_discount = 0 AND (price > price_low AND price < price_high)) OR (price_discount != 0 AND (price_discount > price_low AND price_discount < price_high))
og så showsources ..
hvis prisen er sat til 100 .. så vil min da også vise den hvis du siger at low er 95 og high er 100... Ligemeget hvad discount er ..
Den eneste forskel jeg kan se er at min vil fange alle dem hvor tilbuddet eller den almindelige pris er sat mellem 95 og 100 .. hvor showsources, kun kigger på den almindelige pris hvis tilbudsprisen er 0 .. dvs .. hvis tilbudsprisen er 80 kr .. og du spørger på dem som er mellem 85 og 100 ... og normalprisen er 90 .. så kommer varen ikke op .. fordi du spørger efter en billigere tilbudspris .. ?
øhh, spørger ønsker at hente fra db hvor pris ligger mellem to tal. Hvis det er på tilbud, skal et felt bruges, og ellers standard felt. I mit forslag bruges kun en IF() til at finde ud af hvilket felt der skal kikkes i. Men vil da mene dit ex. også virker.
therealyoda, Jeg ved ikke hvad forklaringen er på det, men det virkede bare ikke da jeg prøvede, og havde siddet og rodet med det i et stykke tid så var lid frustreret over det, kender du det? :)
Så prøvede jeg med showsources kode og det virkede bare, men jeg synes at et svar er et svar, om det virker eller ej så har man gjort en indsats for at hjælpe, så derfor takker jeg mange gange for din hjælp.
kender det godt .. men forstår dog ik det skulle drille.. Nok om det .. det er vand under broen
Synes godt om
Ny brugerNybegynder
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.