Hoogste waarde uit database halen

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Pagina: 1 2 volgende »

Mitch

mitch

26/09/2008 10:38:00
Quote Anchor link
Heey

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

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
<?php
$bod
= mssql_query("    SELECT *
                                FROM
                                    Bod
                                WHERE
                                    voorwerp = $id"
);
?>



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
 
PHP hulp

PHP hulp

23/11/2024 04:42:58
 
Douwe

Douwe

26/09/2008 10:41:00
Quote Anchor link
Dan moet je bodbedrag opslaan als DECIMAL, en dan kun je gewoon ORDER BY bodbedrag doen.
 
Mitch

mitch

26/09/2008 10:43:00
Quote Anchor link
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
 
Michel

Michel

26/09/2008 10:43:00
Quote Anchor link
Ja of SELECT MAX(bodbedrag)
Dat lijkt mij het makkelijkste.
Je krijgt nu als resultaat het hoogste bod!
 
Douwe

Douwe

26/09/2008 10:47:00
Quote Anchor link
Ik zie het bodbedrag staan als char(10)? Maarja, waarom mag je alleen char en numeric gebruiken... Char is hartstikke inefficiënt als de waarde niet altijd die lengte heeft, en numeric is op te delen in int, longint etc, float en decimal, die allemaal veel handiger zijn...
Michel;
Dan moet je wel GROUP BY-en, en dat is in dit geval nergens voor nodig.
 
Mitch

mitch

26/09/2008 10:55:00
Quote Anchor link
dat weet ik niet.. zijn gegevens van school. we moeten ook mssql gebruiken wat ook omslachtig.

atm het ik die met de select max
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
<?php
$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
 
Douwe

Douwe

26/09/2008 10:56:00
Quote Anchor link
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.
 
Robert Deiman

Robert Deiman

26/09/2008 11:01:00
Quote Anchor link
@Douwe M

waarom niet een groep by en het voorwerpid vastzetten? Dan ben je er toch ook, kan je gewoon MAX gebruiken.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
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"
);
?>


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.
 
Mitch

mitch

26/09/2008 11:03:00
Quote Anchor link
hmm... mijn database pakt LIMIT niet. ik werk met mssql en geeft dus geen waarde. weet je miss hoe ik dit dan moet opvangen
 
Douwe

Douwe

26/09/2008 11:03:00
Quote Anchor link
Robert, je hebt gelijk, maar waarom niet met ORDER BY?
 
Mitch

mitch

26/09/2008 11:10:00
Quote Anchor link
tnx robert hij doet het hoor :P. maar hoe haal ik die numeric nu op uit $hoogstebod zodat ik ermee kan rekenen??
 
Robert Deiman

Robert Deiman

26/09/2008 11:19:00
Quote Anchor link
@Douwe
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.
 
Douwe

Douwe

26/09/2008 11:21:00
Quote Anchor link
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)
 
Mitch

mitch

26/09/2008 12:45:00
Quote Anchor link
hey kunnen jullie aub even vertellen hoe ik de uitkomst in $hoogstebod moet gebruiken om er iets mee te doen. ik zit echt te klote de hele tijd al met, mssql_fetch_field en andere dingen maar het lukt me maar niet om de waarde eruit te halen.

bij voorbaat dank
 
Douwe

Douwe

26/09/2008 12:47:00
Quote Anchor link
Je moet de key max_bod hebben.
 
Emmanuel Delay

Emmanuel Delay

26/09/2008 12:49:00
Quote Anchor link
Ja, GROUP BY zeker eens goed bekijken, daar kan je toffe dingen mee doen.

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.
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
SELECT voornaam, COUNT(voornaam) as aantal
FROM leden
GROUP BY voornaam
 
Douwe

Douwe

26/09/2008 12:50:00
Quote Anchor link
Okay, cool :) Weet je toevallig nog een goede tutorial?
 
Emmanuel Delay

Emmanuel Delay

26/09/2008 12:56:00
Quote Anchor link
Nee, sorry, niet speciaal. Ik vrees dat ik je enkel naar Google kan sturen met de zoektermen mysql group by having aggregate functions
 
Douwe

Douwe

26/09/2008 12:57:00
Quote Anchor link
Okay, zal wel lukken :)
 
Mitch

mitch

26/09/2008 13:01:00
Quote Anchor link
Douwe zou je even voormij kunnen schrijven hoe ik dat dan eruit moet halen ik heb atm
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
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);
?>


maar dit werkt niet. weet iemand hoe dit wel moet
Gewijzigd op 01/01/1970 01:00:00 door mitch
 
Douwe

Douwe

26/09/2008 13:04:00
Quote Anchor link
Je hebt $arrary_bod['max_bod'], arrary moet array zijn ;)
 

Pagina: 1 2 volgende »



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.