Sziasztok!
Egy olyan gondom van, hogy adott egy webáruház. Lehetőség van arra, hogy a kiválasztott kategóriákat bizonyos feltétel szerint rendezzzük. Az egyik ilyen feltétel, hogy "Az akciós termékek elől".
Ezt szeretném megoldani valahogyan, hogy az akciós termékek elől legyenek értékük szerint növekvőben majd utána a maradék termék pl. ABC sorrendben.
Ezt meg lehet oldani egy lekérdezésben?
- 2638 megtekintés
Hozzászólások
Ha 0-1 bitet hasznalsz az akcios termek jelzesere, akkor koltsegesen, de igen.
SELECT termek_id,termek_nev,mezo1,mezo2,...,(akcios*termek_ar) AS x FROM tabla ORDER BY x ASC, termek_nev ASC
Vagy tarolt eljaras, es hasonlo okossagok.
- A hozzászóláshoz be kell jelentkezni
Most így néz ki a levérdezésem:
SELECT termekkod, termeknev, ar, akcios_ar AS ak, rov_leiras, nyelv FROM termekek WHERE raktaron > 0 && termekkod LIKE 'CD%' ORDER BY ak ASC, termeknev ASC
- A hozzászóláshoz be kell jelentkezni
Igy az a baj, hogy a nem akcios termekek kerulnek elore?
Ha igen, a legegyszerubb szerintem az, hogy 2 kulon lekerest intezz, egyet az akcios termekekre es egyet a nem akciosokra.
Igaz nem optimalis mert 2 lekeres lesz, de azok viszonylag egyszeruek es az nem elhanyagolhato.
_______________________________________________________
UBUNTU 8.04 Rock's!
Type cat /vmlinuz > /dev/audio to hear the Voice of God.
- A hozzászóláshoz be kell jelentkezni
A bonyolultabb meg megy a query cache-bol.
- A hozzászóláshoz be kell jelentkezni
Jol jonne, ha a termekeket tarolo tabla strukturajat ismernenk es ha az akcios termekek valamien referencia tablaval vannak folepitve akor annak a strukturajat is.
_______________________________________________________
UBUNTU 8.04 Rock's!
Type cat /vmlinuz > /dev/audio to hear the Voice of God.
- A hozzászóláshoz be kell jelentkezni
Egyszerűen mezőkben vannak tárolva. Még az akciós ár is. Nem kell hozzá külön számolni.
- A hozzászóláshoz be kell jelentkezni
Honnan tudod egy termékről, hogy az akciós -e vagy sem?
Tényleg küldhetnél egy describe tablanev; kimenetet
--
http://laszlo.co.hu/
- A hozzászóláshoz be kell jelentkezni
Jelen esetben nem érdekes. Minden termék lekérdezésre kerül, viszont az akciós ár csak abban az esetben jelenik meg ha ki van töltve.
- A hozzászóláshoz be kell jelentkezni
ORDER BY akcios_ar..??
- A hozzászóláshoz be kell jelentkezni
+1,
Legyen az akcios attributum tinyint(1), 0 ha nem akcios, 1 ha akcios. Tartalmazza az ar attributum magat az arat.
order by akcios desc, ar asc
=> eloszor az akciosok jönnek, olcsóbbtól a drágább felé
- A hozzászóláshoz be kell jelentkezni
Nem kell ehhez egy új mező, ha nem akarja a jelenlegi struktúrát megváltoztatni. Azt írta, hogy egy termék akkor akciós, ha ki van töltve az akcios_ar mező. Ha erre a mezőre nyom egy order by -t, akkor is jó lesz, mert az üres=0 és így azok előre kerülnek.
- A hozzászóláshoz be kell jelentkezni
Hömmm... ha egy mező üres, az normális esetben NULL (ami nem egyenlő a 0 számmal vagy az üres stringgel...). 0 akkor lesz, ha MySQL-ül mondva IFNULL(mező, 0) -t vagy COALESCE(mező, 0)-t használsz. Szerintem... (Ettől még az order by helyes eredményt adhat, egykupacpa gyűjtve az üres mezőket tartalmazó sorokat). Egyébként meg kínos dolog sülhet ki abból, ha a NULL-ból 0 lenne: a 0Ft, mint akciós ár feltüntetésre kerülne... opsza :-P Megoldás lehetne egy plusz mező, ami megmondja, hogy a két ár mezőből melyik az érvényes.
- A hozzászóláshoz be kell jelentkezni
Folosleges az uj mezo, inkab erdemes az Add/Edit-nel erre figyelni es ha az akcios_ar mezo 0 vagy uress akor azt NULL-kent menteni.
_______________________________________________________
UBUNTU 8.04 Rock's!
Type cat /vmlinuz > /dev/audio to hear the Voice of God.
- A hozzászóláshoz be kell jelentkezni
dBase-szintű adattárolás rulez kéremcépen... buta struktúra, okos kód, menjen a logika az alkalmazásba...
- A hozzászóláshoz be kell jelentkezni
Ket szintrol beszelunk.
ORDER BY akcios_ar DESC eseten a NULL erteku elemek a vege fele, a nem null erteku elemek az eleje fele lesznek. Pont.
Az mar megint mas kerdes, hogy a megjelenitesnel mar oda kell figyelni, es a 0 Ft akcios aru termeket nem akciosnak jelolni, de ez mar boven nem az SQL lekerdezes szintje.
--
()=() Ki oda vagyik,
('Y') hol szall a galamb
C . C elszalasztja a
()_() kincset itt alant.
- A hozzászóláshoz be kell jelentkezni
Úgy néz ki, hogy működik. Úgy oldottam meg végül, hogy van egy akcios mező ami 0 vagy 1 lehet. Lekérdezem először csak az akciós termékeket, rendezem, majd a nem akciós termékeket és a kettő tömböt egyesítem. Így elöl vannak az akciós termékek az növekvő sorrendben, majd utána a nem akciós termékek abc sorrendben.
Köszi mindenkinek.
- A hozzászóláshoz be kell jelentkezni
es minek ehhez ket query?
miert nem order by foo,bar
t
- A hozzászóláshoz be kell jelentkezni
Ez így van. Jó lenne ha a kedves kérdező elolvasna pár hozzászólást, mert páran ugyan ezt javasoltuk mi is :)
- A hozzászóláshoz be kell jelentkezni
a kerdesben szerepelt, hogy az akciosakat ar szerint, a tobbit abc szerint kell rendezni. lasd az en elso valaszomat.
- A hozzászóláshoz be kell jelentkezni
Egész végig ezzel próbáltam és nem működött úgy ahogy nekem kellett volna. Mert ha elöl voltak az akciós termékek akkor fordított sorrendben voltak, ha viszont sorrendben voltak akkor pedig leghátul helyezkedtek el. Akárhogy próbáltam mindig rossz volt az eredmény. Én sem akartam kettő query-t betenni, de így legalább működik.
- A hozzászóláshoz be kell jelentkezni
Akkor talán érdemesebb volna tanulni a hozzászólásokból. Használd a ORDER BY mezői után az ASC, DESC kulcsszót.
--
The Net is indeed vast and infinite...
http://gablog.eu
- A hozzászóláshoz be kell jelentkezni
no comment
- A hozzászóláshoz be kell jelentkezni
Most mi ez a no comment?
Teljesen igaza van.
Kis olvasmány: http://dev.mysql.com/doc/refman/5.0/en/select.html
- A hozzászóláshoz be kell jelentkezni
Nem fogom ismetelni magam ujra, meg akor sem ha a kedves kerdezo nem kepes a valaszokat vegigolvasni es vegiggondolni.
http://hup.hu/node/59944#comment-625472
Amugy minek keljen meg egy mezo 0-1-es kapcsolonak? Egyszeruen meg lehet kulomboztetni az akcios termeket a nem akciosaktol... akcios_ar=NULL, ha a nem akcios termekek listaja kell es akcios_ar!=NULL ha az akcios termekek listaja kell!
Szerintem aki csak e miatt egy uj oszlopot tesz be az probalja megtanulni, hogy elob gondolkodunk es utanna cselekszunk!
_______________________________________________________
UBUNTU 8.04 Rock's!
Type cat /vmlinuz > /dev/audio to hear the Voice of God.
- A hozzászóláshoz be kell jelentkezni
IS NULL... A NULL semmivel sem egyenlő, legalábbis normális környezetben...
- A hozzászóláshoz be kell jelentkezni
Igen, ebben igazad van, de MySQL-ben mukodik. => arra akartal celeozni, hogy a MySQL nem normalis kornyezet? Mitszolsz ahoz, hogy a NULL = #000000, tehat x=NULL es y=NULL tehat x=#000000=y :)
Belekotni mindenbe belelehet :)
_______________________________________________________
UBUNTU 8.04 Rock's!
Type cat /vmlinuz > /dev/audio to hear the Voice of God.
- A hozzászóláshoz be kell jelentkezni
Ezek szerint nem az, mert nem kezeli helyesen a "semmi"-t. A NULL-t azonosnak venni a nulla számmal, nos... erőteljes meghágása a dolgoknak. Ha inzertálik egy egészséges nullát egy numerikus mezőbe, arra az IS NULL ugye false-ot ad vissza?
- A hozzászóláshoz be kell jelentkezni
A variables egy letezo tabla, 2 sor van benne (az egyszeruseg kedveert nem hoztam lere uj DB-t, tablat, stb..)
mysql> select name from variables WHERE NULL!=0;
Empty set (0.00 sec)
mysql> select name from variables WHERE NULL=0;
Empty set (0.00 sec)
mysql> select name from variables WHERE 0 is NULL;
Empty set (0.00 sec)
mysql> select name from variables WHERE NULL is NULL;
+---------+
| name |
+---------+
| command |
| status |
+---------+
2 rows in set (0.00 sec)
mysql> select name from variables WHERE NULL is not NULL;
Empty set (0.00 sec)
nyos@nyos:~$ mysql --version
mysql Ver 14.12 Distrib 5.0.51a, for debian-linux-gnu (i486) using readline 5.2
A NULL es a 0 ertek nagyon nem ugyanaz.
----
'Give us seeds so that we may live and not die' (Gen 47:19)
Wow! Quoting the bible worked! -Eremal, piratebay
honlapkészítés
- A hozzászóláshoz be kell jelentkezni