ďťż
 
[Oracle,php] between 5 and 10, Union ALL, arrays ďťż
 
[Oracle,php] between 5 and 10, Union ALL, arrays
Zobacz wiadomości
 
Cytat
A gdyby tak się wedrzeć na umysłów górę, / Gdyby stanąć na ludzkich myśli piramidzie, / I przebić czołem przesądów chmurę, / I być najwyższą myślą wcieloną. . . Juliusz Słowacki, Kordian
Indeks BCB i MySQL subiekt gt fototapeta
 
  Witamy

[Oracle,php] between 5 and 10, Union ALL, arrays



eM. - 25-10-2005 10:58
[Oracle,php] between 5 and 10, Union ALL, arrays
  Witam,

pisze jeden z modulow do aplikacji www i napotkalem problem. Aplikacja
pisana byla na serwerze testowym z Postgre, serwer docelowy to Oracle. Po
przeniesieniu wszystko dziala procz stronicowania wynikow. Nie dziala:

[...] rownum between $offset and ($limit + $offset)
[...] rownum between 5 and 15

Rozumiem czemu nie dziala. Znalazlem wyjasnienie oraz rozwiazanie:
http://www.arrowsent.com/oratip/tip41.htm

Jednak w moim przypadku nie potrafie tego zastosowac. Zapytania do bazy
przechowuje w tablicy w php, aby pozniej latwo dodac nowe miejsca z ktorych
maja wyswietlac sie komentarze:

$selects = array();
$selects["blog_comments"] = "select 'blog-comments' as type, forum.id,
forum.create_time, forum.pg_body as body, forum.id_user,
sn_user.id_user as usersid, sn_user.nick, blog_entry.id_topic,
'blog_comments.php?blog='|| blog_entry.id_blog ||
'&entry='||blog_entry.id_blog_entry as url from forum, sn_user, blog_entry
where forum.id_user = sn_user.id_user AND (forum.id = blog_entry.id_topic
OR forum.parent_id=blog_entry.id_topic) AND forum_id = '-1' AND
(wasmoderated is null OR wasmoderated =
'f')";

$selects["photo_comments"] = "select 'photo-comments' as type, forum.id,
forum.create_time, forum.pg_body as body, forum.id_user,
sn_user.id_user as usersid, sn_user.nick, sn_user_photo.id_topic,
'photo_comments.php?main_page=photos&user='|| sn_user_photo.id_user ||
'&photo='||sn_user_photo.id_photo as url from forum, sn_user, sn_user_photo
where forum.id_user = sn_user.id_user AND (forum.id =
sn_user_photo.id_topic OR forum.parent_id=sn_user_photo.id_topic) AND
forum.parent_id != '0' AND forum_id = '-2' AND (wasmoderated is null OR
wasmoderated = 'f')";

$selects["other_comments"] = "select 'other-comments' as type, forum.id,
forum.create_time, forum.pg_body as body, forum.id_user,
sn_user.id_user as usersid, sn_user.nick,
forum.parent_id, '' as url from forum left join sn_user on forum.id_user =
sn_user.id_user where forum_id < '-2' AND (wasmoderated is null OR
wasmoderated =
'f')";

Teraz tutaj staralem sie zastosowac to rozwiazanie, ktore znalazlem na
podanej wyzej stronie:

$res = $GLOBALS["db"]->Execute("SELECT * FROM (".implode(' UNION ALL
',$selects).") t1 WHERE t1.rownum between $offset and ($limit + $offset)");

Zwraca mi blad:

Fatal error: oci8po error: [1747: ORA-01747: invalid user.table.column,
table.column, or column specification ] in EXECUTE("SELECT * FROM (select
'blog-comments' as type, forum.id, forum.create_time ...

Wykonujac to:

$res = $GLOBALS["db"]->Execute(implode(' UNION ALL ',$selects)." AND rownum
between $offset and ($limit + $offset)");

nie dostaje bledu, ale z wiadomych przyczyn nie dziala dzielenie wynikow.

Bardzo prosze o pomoc, jak poprawic SELECT * FROM (".implode(' UNION ALL ...
aby zadzialalo.

Marcin





Lucyna Witkowska - 25-10-2005 10:58

  eM. <adres@email.pl> napisał:
> Teraz tutaj staralem sie zastosowac to rozwiazanie, ktore znalazlem na
> podanej wyzej stronie:

> $res = $GLOBALS["db"]->Execute("SELECT * FROM (".implode(' UNION ALL
> ',$selects).") t1 WHERE t1.rownum between $offset and ($limit + $offset)");

Nie mozna wykonywac na rownum zapytania between, dlatego
pseudokolumna rownum z podzapytania musi zmienic sie w normalna kolumne
zapytania glownego.

Poniewaz tutaj jest jeszcze dodatkowo UNION to mozna wykonac cos
takiego:

select *
from (select rownum r, l.* from (
TUTAJ mozna wstawic zapytanie z tabeli selectow
) l) t
where r between 2 and 3;

Pozdrowienia,
LW




eM. - 27-10-2005 23:55

  > Poniewaz tutaj jest jeszcze dodatkowo UNION to mozna wykonac cos
> takiego:
>
> select *
> from (select rownum r, l.* from (
> TUTAJ mozna wstawic zapytanie z tabeli selectow
> ) l) t
> where r between 2 and 3;

Wielkie dzieki, wczoraj o 1 w nocy natrafilem na ten problem i wymieklem.
Juz zastosowalem i dziala tak jak powinno.

Raz jeszcze dziekuje.

eM.
  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • effulla.pev.pl
  • comp
    Oracle, SQL, PL/SQL. Jak =?ISO-8859-2?Q?napisa=E6_zapytanie=2C?==?ISO-8859-2?Q?_kt=F3re_zwr=F3ci_nazw=EA_atrybutu=2C_kt=F3reg o?==?ISO-8859-2?Q?_warto=B6ci_spe=B3niaj=B1_zadany_warunek?= Oracle 19g +Insert +Insert +Insert... [oracle] zapytanie dynamiczne z =?ISO-8859-2?Q?=22dynamiczn=B1_?==?ISO-8859-2?Q?nazw=B1_tabeli=22?= [Oracle] jak =?ISO-8859-2?Q?ograniczy=E6_pami=EA=E6_dla_se?==?ISO-8859-2?Q?rwera=3F?= =?ISO-8859-2?Q?=5BOT=5D_Zdany_egzamin_Oracle_1Z0-007_a?==?ISO-8859-2?Q?_brak_informacji_na_stronie_Prometric_-_czy?==?ISO-8859-2?Q?_co=B6_nie_tak=3F?= [oracle] czy da =?ISO-8859-2?Q?si=EA_z_poziomu_procedury_?==?ISO-8859-2?Q?zrobi=E6_kopi=EA_zapasow=B1=3F?= [oracle 10g] czy =?ISO-8859-2?Q?mo=BFna_wy=B3=B1czy=E6_wszys?==?ISO-8859-2?Q?tkie_wi=EAzy_w_schemacie=3F?= MSSQL Express czy Oracle Express =?iso-8859-2?q?[oracle]_Jak_sprawdzi=E6_wielko=B6=E6_tabeli_=3F=3F?= =?ISO-8859-2?Q?Poszukjue_ksi=B1=BFki_"Oracle_?= =?ISO-8859-2?Q?optymalizacja_wydajno=B6ci"..?=
  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • morebeer.opx.pl
  • Cytat

    Decede mihi sole - nie zasłaniaj mi słonca.
    Gdy kogoś kochasz, jesteś jak stworzyciel świata - na cokolwiek spojrzysz, nabiera to kształtu, wypełnia się barwą, światłem. Powietrze przytula się do ciebie, choćby był mróz, a ty masz w sobie tyle radości, że musisz ją rozdawać wokoło, bo się w tobie nie mieści
    Hoc fac - tak czyń.
    A tergo - od tyłu; z tyłu.
    I czarne włosy posiwieją. Safona

    Valid HTML 4.01 Transitional

    Free website template provided by freeweblooks.com