Előre is bocsi, ha nagyon primitív lesz a kérdés..
Van egy sqlrészletem, ami egy változóban($a) van:
$a = "se lect * from todo_adatok where id in (se lect id from todo_base where
nev = 'nev') and sid not in (se lect sid from todo_statusz where
statusz_nev = 'kész') and lejar > now()"
és 3 segédváltozóm ($rend1, $limit, $rend2)
$rend1 = "lejar";
$limit = "5";
$rend2 = "datum";
Az lenne a feladat, hogy $a- t rendezze $rend1 szerint, limitálja $limittel
(eddig ugye
$a . " order by " $rend1 . " limit " . $limit
), és
az így kapott táblát rendezze $rend2 szerint. Na most $rend1 után nem
írhatom ugye, hogy
", $rend2"
, mert az mást adna.
Ha mondjuk mindent megváltoztatok, és $a elején select aid lesz (ami primary
key), akkor az alábbi queryre ezt kapom vissza:
se lect * from todo_adatok where aid in (se lect aid from todo_adatok where id
in (se lect id from todo_base where nev = 'nev') and sid not in (se lect
sid from todo_statusz where statusz_nev = 'kész') and lejar > now() order by
lejar limit 5);
ERROR 1235 (42000): This version of MySQL doesn't yet support 'LIMIT &
IN/ALL/ANY/SOME subquery'
Ha lenne valakinek ötlete arra, hogy hogyan tudnám a fenti lekérdezést
helyesen megcsinálni úgy, hogy a $a- t nem bántom, azt nagyon megköszönném
:- ).
- 1859 megtekintés
Hozzászólások
H@lye kérdés, de a hiba üzenetet ugye tudod értelmezni...? (Így B.U.É.K 1. napján)
És ugye nem valami 4.x-es mysql ről van szó?
- A hozzászóláshoz be kell jelentkezni
Persze, hogy tudom :- ). Nekem egy olyan megoldásra lenne szükségem, ami ugyanazt csinálja, amit a hibaüzenetes query (csinálna)... . De, 4.1- es mysql, de kipróbáltam 5.0- sra is, és azzal is ugyanezt kaptam!
Szóval igazából azzal van gondom, hogy ha egy selectre ráeresztek egy order by- t, majd egy limitet, hogyan tudom utána egy másik mező szerint rendezni. Elé ugye nem írhatom, mert akkor más sorokat adna vissza, order by x limit n order by y- t pedig nem fogadja el :- ).
- A hozzászóláshoz be kell jelentkezni
Kötelező ragaszkodnod a MySQL-hez? PostgreSQL szerintem módosítás nélkül vinné. ...ahogy elnézem az Általad használatos kulcsszavak / nyelvi elemek mindegyike támogatott PostgreSQL-ben.
- waiter -
- A hozzászóláshoz be kell jelentkezni
Ennek utánanézek, de egy select miatt nem szeretnék mindent átírni, de valószínűnek tartom, hogy postgres nem nagyon van. Amúgy legrosszabb esetben megírom 2 selectből (order by $rend1 limit $limit), ezt while ciklusba, kiszedem az aid- okat, majd rendezen $rend2 szerint, de sokat dobna, ha ez menne egyből... .
- A hozzászóláshoz be kell jelentkezni
...bár az "IN" helyett egy "UNION"-t vagy "INTERSECT"-et kell használj... a "NOT IN" helyett meg "EXCEPT"-et...
Egyébként a lekérdezésed tipikusan az a pont, ahol/amiben a MySQL (még) gyenge, de a PostgreSQL erős!
- waiter -
- A hozzászóláshoz be kell jelentkezni
Én azt gondolom, hogy UNION -al kell ezt megcsinálni:
http://dev.mysql.com/doc/refman/4.1/en/differences-from-ansi.html
- A hozzászóláshoz be kell jelentkezni