Jij wilt zeggen dat een postgres of mysql or oracle 1,99 als 1,98999 of als 1,97 teruggeeft? Ik geloof daar geen drol van.quote:Op vrijdag 29 november 2013 22:33 schreef Light het volgende:
[..]
Een database kan prima floats en doubles opslaan, maar de exacte waarde die je opslaat is niet de waarde die je terugkrijgt. Floats en doubles kunnen namelijk niet ieder getal exact weergeven. 1,99 wordt dan misschien 1,9899999999. En dat gaat vroeg of laat afrondingsproblemen geven die ook nog eens best lastig te vinden zijn. Bij financiele informatie is dat niet wenselijk, dus kun je beter met centen rekenen en pas bij weergave afronden.
Light overdrijft een beetje, maar heeft wel een puntje.quote:Op vrijdag 29 november 2013 22:35 schreef slacker_nl het volgende:
[..]
Jij wilt zeggen dat een postgres of mysql or oracle 1,99 als 1,98999 of als 1,97 teruggeeft? Ik geloof daar geen drol van.
Zie bijvoorbeeld ook hier:quote:Op vrijdag 29 november 2013 22:35 schreef slacker_nl het volgende:
[..]
Jij wilt zeggen dat een postgres of mysql or oracle 1,99 als 1,98999 of als 1,97 teruggeeft? Ik geloof daar geen drol van.
Het is gewoon opletten met wat je doet, bijv round(1.4545,2) geeft 1.45 terug.quote:Op vrijdag 29 november 2013 22:35 schreef slacker_nl het volgende:
[..]
Jij wilt zeggen dat een postgres of mysql or oracle 1,99 als 1,98999 of als 1,97 teruggeeft? Ik geloof daar geen drol van.
Het probleem is niet round(), het probleem is die 1.4545 en de nauwkeurigheid daarvan. Als je alleen dat getal hebt, zal het wel goed gaan. Als je spannende berekeningen doet en verschillende getallen gebruikt, kun je een afwijking krijgen.quote:Op vrijdag 29 november 2013 22:43 schreef TwenteFC het volgende:
[..]
Het is gewoon opletten met wat je doet, bijv round(1.4545,2) geeft 1.45 terug.
Vreemd, hier wel. Wat is de return value van setlocale? Zie de docs even, daar staan wat nuttige dingen in..quote:Op vrijdag 29 november 2013 21:48 schreef xaban06 het volgende:
[..]
setlocale lijkt geen verandering er in te brengen.
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | CREATE TABLE `group` ( `id` TINYINT NULL AUTO_INCREMENT DEFAULT NULL, `name` TINYINT NULL DEFAULT NULL, PRIMARY KEY (`id`) ); CREATE TABLE `location` ( `id` TINYINT NULL AUTO_INCREMENT DEFAULT NULL, `group_id` TINYINT NULL DEFAULT NULL, PRIMARY KEY (`id`) ); CREATE TABLE `room` ( `id` TINYINT NULL AUTO_INCREMENT DEFAULT NULL, `location_id` TINYINT NULL DEFAULT NULL, PRIMARY KEY (`id`) ); CREATE TABLE `opening_hours` ( `id` TINYINT NULL AUTO_INCREMENT DEFAULT NULL, `open_time` TIME NULL DEFAULT NULL, `close_time` TIME NULL DEFAULT NULL, `weekday` TINYINT NULL DEFAULT NULL, PRIMARY KEY (`id`) ); |
Opzich ook een mooie oplossing inderdaad, alleen heb ik hier een ander probleem, namelijk dat de openingstijden per dag verschillend kunnen zijn (het weekday veld in opening_hours) Dat betekent dat ieder eigenlijk 7 "openingstijden" heeft. Om nou aan elke tabel zeven velden toe te voegen lijkt me ook niet erg mooi.quote:Op zondag 1 december 2013 13:41 schreef papernote het volgende:
Derde optie: een opening_hours_id toevoegen aan group, location en room welke ook NULL kan zijn.
Dan kun je beter aan de tabel opening_hours een kolom location_id (of room_id) toevoegen, om aan te geven voor welke locatie die openingstijden gelden. Dan weet je ook zeker dat je voor iedere lokatie de tijden apart kunt aanpassen zonder dat je tijden van andere lokaties verandert.quote:Op zondag 1 december 2013 13:53 schreef Alfje het volgende:
[..]
Opzich ook een mooie oplossing inderdaad, alleen heb ik hier een ander probleem, namelijk dat de openingstijden per dag verschillend kunnen zijn (het weekday veld in opening_hours) Dat betekent dat ieder eigenlijk 7 "openingstijden" heeft. Om nou aan elke tabel zeven velden toe te voegen lijkt me ook niet erg mooi.
Als je het echt wilt normaliseren ontkomt je daar niet aan, anders gaat het botsen met je business rules. Wat je nog wel zou kunnen doen is een table "opening schema's" maken waarin je dus verschillende sets van openingstijden kunt definieren, eventueel zou je dat ook weer naar 2 tables kunnen normaliseren met weer een opsplitsing per dag.quote:Op zondag 1 december 2013 13:53 schreef Alfje het volgende:
[..]
Opzich ook een mooie oplossing inderdaad, alleen heb ik hier een ander probleem, namelijk dat de openingstijden per dag verschillend kunnen zijn (het weekday veld in opening_hours) Dat betekent dat ieder eigenlijk 7 "openingstijden" heeft. Om nou aan elke tabel zeven velden toe te voegen lijkt me ook niet erg mooi.
| 1 | PHP Fatal error: Cannot use object of type mysqli_result as array in file.php |
| 1 2 3 4 5 6 7 8 9 10 11 12 13 | <?php $productQuery = "SELECT ean, name FROM products WHERE category = '$category'"; $productResult = $mysqli->query($productQuery); while ($productRow = $productResult->fetch_assoc()) { $productPriceQuery = "SELECT ean, price+shipmentCost AS totalPrice FROM prices WHERE ean = $productRow[ean] ORDER BY totalPrice ASC"; $productPriceResult = $mysqli->query($productPriceQuery); $totalPrice = $productPriceResult->fetch_assoc(); echo $productPriceResult["productURL"]; } ?> |
quote:Return Values
Returns FALSE on failure. For successful SELECT, SHOW, DESCRIBE or EXPLAIN queries mysqli_query() will return a mysqli_result object. For other successful queries mysqli_query() will return TRUE.
Ik weet dat het efficienter kan dmv een 1 langere query, maar voor nu wil ik het doen zoals ik het heb, moet ook gewoon kunnen toch?quote:Op donderdag 5 december 2013 16:00 schreef zoem het volgende:
Beste oplossing (vziw ik uit de context kan halen): gebruik een JOIN.
Oplossing voor jouw snippet: sla de documentatie erop na
[..]
Natuurlijk, dat gaat ook werken. Alleen kan het aantal queries dan gigantisch oplopen als je een hele reeks aan producten hebt, waardoor de pagina traag wordt en/of de server het (onnodig) druk kan krijgen bij veel bezoekers.quote:Op donderdag 5 december 2013 16:05 schreef xaban06 het volgende:
[..]
Ik weet dat het efficienter kan dmv een 1 langere query, maar voor nu wil ik het doen zoals ik het heb, moet ook gewoon kunnen toch?
Klopt, maar dat is het geval nietquote:Op donderdag 5 december 2013 16:08 schreef zoem het volgende:
[..]
Natuurlijk, dat gaat ook werken. Alleen kan het aantal queries dan gigantisch oplopen als je een hele reeks aan producten hebt, waardoor de pagina traag wordt en/of de server het (onnodig) druk kan krijgen bij veel bezoekers.
En daarbij nog de overhead welke wordt veroorzaakt door het verkeer tussen het script en de MySQL server... Ik zou zelf niet zo snel query's in een loop gaan zetten als dat niet nodig is.quote:Op donderdag 5 december 2013 16:08 schreef zoem het volgende:
[..]
Natuurlijk, dat gaat ook werken. Alleen kan het aantal queries dan gigantisch oplopen als je een hele reeks aan producten hebt, waardoor de pagina traag wordt en/of de server het (onnodig) druk kan krijgen bij veel bezoekers.
quote:Op donderdag 5 december 2013 16:09 schreef xaban06 het volgende:
[..]
Klopt, maar dat is het geval nietEn ik wil het liever nu werkend hebben dan dat ik me weer moet inlezen, proberen, repareren, proberen, etc etc. Kost erg veel tijd voor nu
Wat is er precies fout in mijn script?
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | <?php $productQuery = "SELECT ean, name FROM products WHERE category = '$category'"; $productResult = $mysqli->query($productQuery); while ($productRow = $productResult->fetch_assoc()) { $productPriceQuery = "SELECT ean, price+shipmentCost AS totalPrice FROM prices WHERE ean = $productRow[ean] ORDER BY totalPrice ASC"; $productPriceResult = $mysqli->query($productPriceQuery); $totalPrice = $productPriceResult->fetch_assoc(); echo $productPriceResult["productURL"]; // productPriceResult is dus een mysqli object, geen array echo $totalPrice["productURL"]; // totalPrice moet je hebben, want die had je al omgezet naar een assoc array } ?> |
Je kunt je query simpelweg aanpassen naar:quote:Op donderdag 5 december 2013 16:09 schreef xaban06 het volgende:
[..]
Klopt, maar dat is het geval nietEn ik wil het liever nu werkend hebben dan dat ik me weer moet inlezen, proberen, repareren, proberen, etc etc. Kost erg veel tijd voor nu
Wat is er precies fout in mijn script?
| 1 2 3 4 | $productQuery = "SELECT products.ean, products.name, prices.price+prices.shipmentCost AS totalPrice, products.productURL FROM products JOIN prices ON products.ean = prices.ean WHERE category = '$category'"; |
Hartstikke bedankt voor de query, wordt gewaardeerd, maar mijn query wordt straks nog langer en dan weet ik dat ik er niet meer uit zal komen, vandaar hield ik het simpelquote:Op donderdag 5 december 2013 16:15 schreef bondage het volgende:
[..]
Je kunt je query simpelweg aanpassen naar:
[ code verwijderd ]
De laatste regel in de loop is de verbetering, de voorlaatste regel is foutief.quote:Op donderdag 5 december 2013 16:15 schreef xaban06 het volgende:
[..]
Ik zie geen verschil tussen jouw en mijn code, of wel?
De vraag is of er meerdere prijzen zijn per artikel, want dan moet de code iets aangepast worden. Anders was dit een prima drop-in replacement geweestquote:Op donderdag 5 december 2013 16:15 schreef bondage het volgende:
[..]
Je kunt je query simpelweg aanpassen naar:
[ code verwijderd ]
Per product zijn er meerdere prijzen, ik haal de goedkoopste eruit per product.quote:Op donderdag 5 december 2013 16:17 schreef zoem het volgende:
[..]
De laatste regel in de loop is de verbetering, de voorlaatste regel is foutief.
[..]
De vraag is of er meerdere prijzen zijn per artikel, want dan moet de php code iets aangepast worden.
Deze query zou die data moeten teruggeven. Kan echter niet testen en weet niet zeker of het zo klopt... Misschien dat zoem hier eventueel een aanvulling op kan geven.quote:Op donderdag 5 december 2013 16:18 schreef xaban06 het volgende:
[..]
Per product zijn er meerdere prijzen, ik haal de goedkoopste eruit per product.
| 1 2 3 4 5 6 7 8 | SELECT * FROM ( SELECT products.ean, products.name, prices.price+prices.shipmentCost AS totalPrice, products.productURL FROM products JOIN prices ON products.ean = prices.ean WHERE category = '$category' ) AS t GROUP BY t.ean HAVING t.totalPrice = MIN(t.totalPrice) |
| Forum Opties | |
|---|---|
| Forumhop: | |
| Hop naar: | |