Avatar billede jakobsen Nybegynder
09. april 2005 - 11:51 Der er 34 kommentarer

select mindste værdi

hej,

nogle der kan hjælpe mig, jeg har noget data i mysql,
en slags pris top 3

|produkt|pris1|pris2|pris3
|test1|20|23|24.50
|test2|19|10|23

hvordan selecter jeg sådan at jeg får mindste værdi af pris1,pris2,pris3 ?
Avatar billede kalp Novice
09. april 2005 - 11:53 #1
Select MIN(pris3)
from tabel

?
Avatar billede jakobsen Nybegynder
09. april 2005 - 11:54 #2
altså, den skal tage den mindste af alle pris1,pris2,pris3
og gerne også komme med output om hvilken den tog.. muligt?
Avatar billede kalp Novice
09. april 2005 - 11:57 #3
SELECT MIN(pris1) as Priset, MIN(pris2) as Pristo, MIN(pris3) as Pristre
FROM test1, test2;

ved ikke om det virker:) længe siden
Avatar billede jakobsen Nybegynder
09. april 2005 - 11:59 #4
man vælger f.eks. kun produkt test1, og så skal man finde den sidste pris af pris1, 2, 3 osv..
men jeg kan regne ud jeg skal vist lave noget php der tjekker det? man kan nok ik i mysql
Avatar billede jakobsen Nybegynder
09. april 2005 - 12:00 #5
SELECT MIN(pris1,pris2,pris3) as Pris FROM test1... vil det virke?
Avatar billede kalp Novice
09. april 2005 - 12:03 #6
nok mere

SELECT MIN(pris1) as Priset, MIN(pris2) as Pristo, MIN(pris3) as Pristre
FROM test1;
Avatar billede jakobsen Nybegynder
09. april 2005 - 12:06 #7
så får jeg da Priset, pristo, pristre, så kan jeg ligeså godt select pris1,2,3 ?
Avatar billede kalp Novice
09. april 2005 - 12:11 #8
nåhh okay.. nu forstå jeg hvad du mener:) jeg troede du vil have den mindste værdi i hele kolonne i hver!
Avatar billede kalp Novice
09. april 2005 - 12:12 #9
okay jeg ved ikke med sql så... jeg ville nok printe det ud via. asp / php
Avatar billede detox Nybegynder
09. april 2005 - 12:18 #10
Måske:

SELECT LEAST(MIN(pris1), MIN(pris2), MIN(pris3)) as pris FROM tabel
Avatar billede jakobsen Nybegynder
09. april 2005 - 12:21 #11
argument is not a valid MySQL result resource
Avatar billede arne_v Ekspert
09. april 2005 - 12:22 #12
SELECT produkt,IF(pris1<pris2,IF(pris1<pris3,pris1,pris3),IF(pris2<pris3,pris2,pris3)),produkt
FROM tabel

vil være mit bud
Avatar billede jakobsen Nybegynder
09. april 2005 - 12:25 #13
virker ikke, hvis jeg bare henter dem ud, er der så nogle der ved
hvad man via php nemt og enkelt kan finde den der er mindst vær?
Avatar billede detox Nybegynder
09. april 2005 - 12:25 #14
Sjovt nok:

SELECT LEAST(MIN(pris1), MIN(pris2), MIN(pris3)) as pris FROM tabel

fungerer fint nok for mig?
Avatar billede jakobsen Nybegynder
09. april 2005 - 12:26 #15
ok, der er pris op til 10 ..
Avatar billede jakobsen Nybegynder
09. april 2005 - 12:26 #16
hmm
Avatar billede detox Nybegynder
09. april 2005 - 12:26 #17
I php hedder det osse min(), så der kan du finde den med:

$pris = min($pris1, $pris2, $pris3);
Avatar billede jakobsen Nybegynder
09. april 2005 - 12:28 #18
SELECT LEAST(MIN(pris1), MIN(pris2), MIN(pris3)) as pris FROM tabel

måske den virker her også, jeg har nogle felter der er tomme,
så tager den sikkert det som mindst?
kan man sige at det skal være dem der er indhold i ? altså over "ingen ting"
Avatar billede detox Nybegynder
09. april 2005 - 12:34 #19
Hvad hvis du sætter standardværdien for tomme felter til NULL, så bliver de ikke taget med i sammenligningen.
Avatar billede jakobsen Nybegynder
09. april 2005 - 12:58 #20
er der nogle begrænsninger på LEAST, jeg kan kun få den til at
virke med op til 4 felter..
Avatar billede detox Nybegynder
09. april 2005 - 13:49 #21
Det tror jeg ikke. Eller måske er der en praktisk begrænsning, men jeg har lige testet med 50 værdier, det går fint.
Avatar billede jakobsen Nybegynder
09. april 2005 - 17:45 #22
ja, det når der er nogle felter uden indhold så virker det ikke :(
det gælder også funktionen i php.

så vælger den at der hvor der "tomt" er mindst.. kan man lave en select
hvor den ikke tager dem med "tomt" felt eller?
Avatar billede jakobsen Nybegynder
09. april 2005 - 17:49 #23
I php, hvis man har  $test1 = "1"; $test2 = "";  $test3 = ""; $test4 = ""; $test5="6"; $test6="7";

og laver en MIN($test1,$test2,$test3,$test4,test5); virker det ikke,
tror det fordi den ser jo sådan ud MIN(1,,,6,7);
Avatar billede detox Nybegynder
09. april 2005 - 18:07 #24
Har du ikke mulighed for at lave felterne med NULL, som jeg foreslog tidligere?
Avatar billede jakobsen Nybegynder
09. april 2005 - 18:10 #25
det har jeg lavet.. dvs. der NULL når der ingen ting er i dem..
Avatar billede jakobsen Nybegynder
09. april 2005 - 18:17 #26
felterne er FLOAR, fordi det vist mest korrekt til tal.

dvs. når der intet indhold er, er der NULL/0,
Avatar billede arne_v Ekspert
09. april 2005 - 18:26 #27
FLOAT er ikke godt til beløb. DECIMAL/NUMERIC er meget bedre.

NULL og 0 er to meget meget meget forskellige værdier.
Avatar billede jakobsen Nybegynder
09. april 2005 - 18:31 #28
DECIMAL dur ikke, da alle beløb er med 120.25 osv.
Avatar billede arne_v Ekspert
09. april 2005 - 18:34 #29
Der er vel ikke noget problem med at putte 120.25 i en DECIMAL(12,2) ?
Avatar billede jakobsen Nybegynder
09. april 2005 - 22:52 #30
12,2?  . . det har jeg ik helt styr på, vil du forklare?
Avatar billede arne_v Ekspert
09. april 2005 - 22:54 #31
12 tegn - 2 efter komma
Avatar billede jakobsen Nybegynder
09. april 2005 - 23:40 #32
nu har jeg fået SELECT LEAST(MIN(pris1), MIN(pris2), MIN(pris3)) as pris FROM tabel
til næsten at virke.

dvs. et tal i databasen på: 695.93 bliver når det kommer ud med overstående funktion til: 695.92999267578

giver det mening?
Avatar billede detox Nybegynder
10. april 2005 - 00:22 #33
Det må være noget med databasens interne repræsentation af værdier, men hvis du runder af til 2 decimaler (evt. i php med number_format() eller lign.) er den vel hjemme?
Avatar billede jakobsen Nybegynder
25. maj 2005 - 07:52 #34
hvis man bruger SELECT LEAST hvorfor vælger den så 1000.98 i tilfælde hvor man har 345.54 - 432.98 - 987.56 - 1000.98

tusinde er da ikke mindst?
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
Computerworld tilbyder specialiserede kurser i database-management

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