Hi /14,
Ik heb een heel raar probleem met MySQL. Aanschouw dit snippet code:
De tabel-structuur is deze:
Als ik nu echter de tabel bekijk dan zie ik het productpricehistory_id netjes oplopen, maar de date_pricechange vertoont soms hele gekke schommelingen. Voorbeeldje:
Als je een auto-increment PK hebt, en bij ieder nieuw record date_pricechange op NOW() zet, dan zou het toch helemaal niet moeten kunnen dat de datum bij oplopende PK opeens dipt van 27 oktober naar 15 juni (naar 31 mei, naar 27 mei, naar 13 april) en vervolgens weer netjes terug schiet?
Ik ben er verder in gaan duiken, en als ik de prijs-veranderingen van 1 product op PK gesorteerd bekijk, dan zou het altijd zo moeten zijn dat price_new van een record altijd price_old van het opeenvolgende record moet zijn. Maar dat is niet zo, kijk maar:
Het gaat mis van 8459 naar 8460: de prijs van 283 gaat opeens naar 285. Sorteer je echter op date_pricechange (ASC) dan klopt de volgorde wel. Het laatste blijkt voor alle producten te kloppen; deze tabel gesorteerd op date_pricechange geeft altijd logisch resultaten, maar gesorteerd op productpricehistory_id niet. Hoe kan dat
Het is vast iets simpels, maar ik zie het niet
Ik heb een heel raar probleem met MySQL. Aanschouw dit snippet code:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
| Database::query(sprintf(" INSERT INTO productpricehistory ( product_id, price_old, price_new, date_pricechange ) VALUES ( %d, %f, %f, NOW() )", $product_id, $price, $price_new )); |
De tabel-structuur is deze:
SQL:
1
2
3
4
5
6
7
8
9
| CREATE TABLE `productpricehistory` ( `productpricehistory_id` int(10) unsigned NOT NULL AUTO_INCREMENT, `product_id` int(10) unsigned NOT NULL, `price_old` decimal(10,2) DEFAULT NULL, `price_new` decimal(10,2) DEFAULT NULL, `date_pricechange` datetime DEFAULT NULL PRIMARY KEY (`productpricehistory_id`), KEY `ix_product` (`product_id`) ) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci; |
Als ik nu echter de tabel bekijk dan zie ik het productpricehistory_id netjes oplopen, maar de date_pricechange vertoont soms hele gekke schommelingen. Voorbeeldje:
code:
1
2
3
4
5
6
7
8
9
10
11
| productpricehistory_id product_id price_old price_new date_pricechange 8512 6923 399 479 2014-10-26 23:09:56 8513 6924 399 479 2014-10-26 23:10:03 8514 5198 376 349 2014-10-27 12:00:04 8515 7596 28 27 2014-06-15 23:00:04 8516 7596 29 28 2014-05-31 17:00:04 8517 7596 27 29 2014-05-27 00:25:11 8518 7596 28 27 2014-04-13 12:00:03 8519 7596 27 29 2014-10-27 13:06:44 8520 4285 289 285 2014-10-27 23:00:04 8521 1484 193 185 2014-10-27 23:00:04 |
Als je een auto-increment PK hebt, en bij ieder nieuw record date_pricechange op NOW() zet, dan zou het toch helemaal niet moeten kunnen dat de datum bij oplopende PK opeens dipt van 27 oktober naar 15 juni (naar 31 mei, naar 27 mei, naar 13 april) en vervolgens weer netjes terug schiet?
Ik ben er verder in gaan duiken, en als ik de prijs-veranderingen van 1 product op PK gesorteerd bekijk, dan zou het altijd zo moeten zijn dat price_new van een record altijd price_old van het opeenvolgende record moet zijn. Maar dat is niet zo, kijk maar:
code:
1
2
3
4
| productpricehistory_id product_id price_old price_new date_pricechange 8458 7595 283 299 2014-10-22 10:05:14 8459 7595 299 283 2014-10-12 08:00:04 8460 7595 285 299 2014-09-30 20:24:55 |
Het gaat mis van 8459 naar 8460: de prijs van 283 gaat opeens naar 285. Sorteer je echter op date_pricechange (ASC) dan klopt de volgorde wel. Het laatste blijkt voor alle producten te kloppen; deze tabel gesorteerd op date_pricechange geeft altijd logisch resultaten, maar gesorteerd op productpricehistory_id niet. Hoe kan dat