Avatar billede mac10 Nybegynder
08. november 2010 - 13:00 Der 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.

På forhånd rigtig mange tak!
Avatar billede mcb2001 Nybegynder
08. november 2010 - 13:02 #1
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
Avatar billede The Real Yoda Juniormester
08. november 2010 - 13:04 #2
Du kunne jo også bare ..

SELECT * FROM products WHERE (price >= $price_low AND price <= $price_high) or (price_discount >= $price_low AND price_discount <= $price_high)

Det skulle da gerne virke.. og noget hurtigere end join..
Avatar billede mcb2001 Nybegynder
08. november 2010 - 13:09 #3
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 :-)
Avatar billede mac10 Nybegynder
08. november 2010 - 13:44 #4
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? :/
Avatar billede mcb2001 Nybegynder
08. november 2010 - 13:59 #5
hvad står der i price_discount hvis du ikke har en rabat pris? NULL eller 0 eller?
Avatar billede mac10 Nybegynder
08. november 2010 - 14:13 #6
Der står 0, det er en int, men kan sagtens laves om til NULL hvis det kan fikse problemet?
Avatar billede showsource Seniormester
08. november 2010 - 14:14 #7
Der står nok 0 eller ingenting :O)

Og hvis nu NULL er default:

$sql = "SELECT * FROM products WHERE IF(price_discount IS NULL, price, price_discount) BETWEEN ".$price_low." AND ".$price_high;
Avatar billede showsource Seniormester
08. november 2010 - 14:15 #8
$sql = "SELECT * FROM products WHERE IF(price_discount = 0, price, price_discount) BETWEEN ".$price_low." AND ".$price_high;
Avatar billede mcb2001 Nybegynder
08. november 2010 - 14:21 #9
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))

bør også løse det samme...
Avatar billede mac10 Nybegynder
08. november 2010 - 14:22 #10
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
Avatar billede showsource Seniormester
08. november 2010 - 14:30 #11
ok
Avatar billede mac10 Nybegynder
08. november 2010 - 14:32 #12
mcb2001, er du rar lige at smide et svar. Mange tak
Avatar billede The Real Yoda Juniormester
09. november 2010 - 11:10 #13
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 .. ?
Avatar billede showsource Seniormester
09. november 2010 - 11:32 #14
ø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.
Avatar billede mac10 Nybegynder
10. november 2010 - 10:30 #15
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.
Avatar billede The Real Yoda Juniormester
10. november 2010 - 11:27 #16
kender det godt .. men forstår dog ik det skulle drille..
Nok om det .. det er vand under broen
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

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