Növekvő árak szerint listázás
Sziasztok.
(egyszerűsített példa): adot az árúk(productid) árait(price) tároló tábla(price_test), az árak meghatározásainak időpontjaival(datetime)Ki szeretném listázni (jelenlegi) árak szerint nővekvő sorrendben a terméket. És ezt ha meglehet oldani akkor egymásba ágyazott selectek nélkül. szeretném kapni.lenne számomra az "logikus" megoldás..
■ (egyszerűsített példa): adot az árúk(productid) árait(price) tároló tábla(price_test), az árak meghatározásainak időpontjaival(datetime)
CREATE TABLE `price_test` (
`id` mediumint(9) unsigned NOT NULL AUTO_INCREMENT,
`productid` mediumint(9) unsigned NOT NULL,
`price` mediumint(9) unsigned NOT NULL,
`datetime` datetime NOT NULL,
PRIMARY KEY (`id`)
);
INSERT INTO `price_test` (`id`, `productid`, `price`, `datetime`) VALUES
(1, 1, 4, '2011-04-14 17:20:05'),
(2, 1, 44, '2011-04-14 17:21:14'),
(3, 2, 6, '2011-04-14 17:20:05'),
(4, 2, 5, '2011-04-14 17:44:27'),
(5, 3, 7, '2011-04-14 17:20:05'),
(6, 3, 50, '2011-04-14 17:58:47'),
(7, 3, 70, '2011-04-14 17:20:57');
id productid price datetime
4 2 5 2011-04-14 17:44:27
2 1 44 2011-04-14 17:21:14
6 3 50 2011-04-14 17:58:47
SELECT
*
FROM
price_test
GROUP BY
productid
HAVING
max(datetime)
ORDER BY
price ASC
minek bonyolítani?
(sajnos a mutatott kód és a kérdésed nincs összhangban, ezért nem teljesen világos, hogy ténylegesen mit szeretnél..)
select-es kódomat
Minden árúnak a legújabb árát szeretném listázni, majd ezt szeretném rendezni.
Vagyis a példánál maradva három sort kapjak vissza, (1, 2, 3- as árút)
második oszlop (productId) szerint kénne csoportosítani, majd azok közül kiválasztani a nagyobb dátumú sort.
(1, 1, 4, '2011-04-14 17:20:05')
(2, 1, 44, '2011-04-14 17:21:14')
(3, 2, 6, '2011-04-14 17:20:05')
(4, 2, 5, '2011-04-14 17:44:27')
(5, 3, 7, '2011-04-14 17:20:05')
(6, 3, 50, '2011-04-14 17:58:47')
(7, 3, 70, '2011-04-14 17:20:57')
Igen sajnos szükségem van a régi árakra is. és ha egy mód van rá akkor akkor ne ezen a ponton legyen redunáns az adatbázis.
Sajnos belső SELECT mentes
Könnyebben megoldhatod ezt a
Sajnos van benne subselect, de hátha
MSSQL alatt teszteltem, de szerintem mysql alatt is mennie kell.
Én így csinálnám SELECT
köszönöm
végül ezt választottam mert ez 150ezer soros táblát is átnyálazz belátható időn belül. (~0.5s)
Ha belassul akkor majd felbontom a normálformát és felveszek egy plusz boolean oszlopot (price_active).
kíváncsiság
hát..
hosszabban:
~5300 rekordnál a nyertes másodperc törtrésze alatt végzett, kódotok meg másodpercekig tekerte a db-t.
Viszont!
- másik táblára engedtem rá a kódokat. (irányítószám táblára, három oszloppal (id, postcode, cityname. Postcode szerint group by -oltam[productid helyett], cityName szerint kiválasztva a nagyobbat[datetime helyett], a végén meg cityName szerint rendezve [price] helyett.)
- phpMyAdminnal teszteltem... ami nem erre lett kitalálva...
- és ami fontos: annyira nagy különbség jött ki hogy simán lehet hogy valamit elnéztem a másik táblaszerkezetre átírása közben.
:)
Nem vagyok egy db mágus, szóval elképzelhető, hogy amit írtam, az nem legoptimalizáltabb sql.. :)
ne felejtsd el..