Hoogste waarde uit database halen
ik ben bezig met een veilingsite. zoals de bedoeling is kunnen gebruikers bieden op voorwerpen. om te controleren of het ingevoerde bedrag voor een voorwerp groter is dan het ervoor geboden getal. om dit te controleren moet ik uit een tabel met biedingen de grootste bieding op dat voorwerp halen.
ik heb al de volgende query geschreven waarin ik alle biedingen van dat voorwerp isoleer maar nu wil ik dat ik het hoogst geboden bedrag krijg in een variabele, ik heb alleen geen idee hoe ik dat moet doen
de tabel bod ziet er als volgt uit:
create table Bod(
gebruiker char(15) not null,
voorwerp numeric(10) not null,
bodbedrag char(10) not null,
boddatum datetime not null,
constraint PK_BOD primary key (voorwerp, bodbedrag),
constraint AK_BOD1 unique (gebruiker, boddatum),
constraint AK_BOD2 unique (voorwerp, boddatum),
bij voorbaat dank
Dan moet je bodbedrag opslaan als DECIMAL, en dan kun je gewoon ORDER BY bodbedrag doen.
dat is een beetje het probleem, het is een school opdracht en we mogen alleen maar gebruik maken van char en numeric. het bodbedrag staat in numeric. en ik kan het best ordenen maar ik weet dan nog niet hoe ik de bovenste waarde van die tabel moet pakken
Dat lijkt mij het makkelijkste.
Je krijgt nu als resultaat het hoogste bod!
Michel;
Dan moet je wel GROUP BY-en, en dat is in dit geval nergens voor nodig.
atm het ik die met de select max
Code (php)
1
2
3
4
5
6
7
2
3
4
5
6
7
<?php
$hoogstebod = mssql_query(" SELECT MAX (bodbedrag)
FROM
Bod
WHERE
voorwerp = $id");
?>
$hoogstebod = mssql_query(" SELECT MAX (bodbedrag)
FROM
Bod
WHERE
voorwerp = $id");
?>
ik heb het in de database getest en ik krijg het hoogste bod.
maar kan iemand me ff snel vertellen hoe ik die waarde uit de varriabele haal? :P
Dat werkt, maar is geen goede SQL. Dan moet je het nog groupen. Als je gewoon ORDER BY bodbedrag LIMIT 1 doet, heb je het ook.
waarom niet een groep by en het voorwerpid vastzetten? Dan ben je er toch ook, kan je gewoon MAX gebruiken.
Code (php)
1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
<?php
$hoogstebod = mssql_query(" SELECT MAX (bodbedrag) AS max_bod
FROM
Bod
WHERE
voorwerp = $id
GROUP BY
voorwerp");
?>
$hoogstebod = mssql_query(" SELECT MAX (bodbedrag) AS max_bod
FROM
Bod
WHERE
voorwerp = $id
GROUP BY
voorwerp");
?>
En eruithalen (zie je de AS max_bod die ik erbij heb gezet) doe je gewoon zoals je gewend bent, waarbij in dit geval max_bod als kolomnaam werkt.
hmm... mijn database pakt LIMIT niet. ik werk met mssql en geeft dus geen waarde. weet je miss hoe ik dit dan moet opvangen
Robert, je hebt gelijk, maar waarom niet met ORDER BY?
tnx robert hij doet het hoor :P. maar hoe haal ik die numeric nu op uit $hoogstebod zodat ik ermee kan rekenen??
Waarom zou je alle records inlezen, en deze vervolgens gaan ordenen en dan zorgen dat die maar 1 teruggeeft? MAX doet dit zelf en is daarvoor bedoeld.
Okay, je hebt gelijk ;) Dat ik liever LIMIT gebruik zal wel komen omdat ik GROUP BY nooit goed begrepen heb :) (Als je nog een GROUP BY-tutorial weet, hoor ik het graag)
bij voorbaat dank
Je moet de key max_bod hebben.
Group by neemt een aantal records en voegt ze samen tot 1 record.
Wil je bv. weten hoeveel leden Jan heten, kan je groeperen per voornaam.
Dan kan je een aantal bewerkingen doen, aggregate functions, zoals COUNT(), MAX(), ...
bv.
Okay, cool :) Weet je toevallig nog een goede tutorial?
Nee, sorry, niet speciaal. Ik vrees dat ik je enkel naar Google kan sturen met de zoektermen mysql group by having aggregate functions
Okay, zal wel lukken :)
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
2
3
4
5
6
7
8
9
10
11
12
<?php
$bod = mssql_query(" SELECT MAX (bodbedrag) AS max_bod
FROM
Bod
WHERE
voorwerp = $id
GROUP BY
voorwerp");
$array_bod = mssql_fetch_array($bod);
$hoogstebod = $arrary_bod ['max_bod'];
var_dump ($hoogstebod);
?>
$bod = mssql_query(" SELECT MAX (bodbedrag) AS max_bod
FROM
Bod
WHERE
voorwerp = $id
GROUP BY
voorwerp");
$array_bod = mssql_fetch_array($bod);
$hoogstebod = $arrary_bod ['max_bod'];
var_dump ($hoogstebod);
?>
maar dit werkt niet. weet iemand hoe dit wel moet
Gewijzigd op 01/01/1970 01:00:00 door mitch
Je hebt $arrary_bod['max_bod'], arrary moet array zijn ;)