![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 7 Pomógł: 0 Dołączył: 18.12.2006 Ostrzeżenie: (0%) ![]() ![]() |
Witam,
jest taki temat: jeśli wyciągam sobie z tabeli grupę rekordów podając ich ID w odp. kolejności w WHERE id IN (...), to w tejże kolejności postgres zwraca rekordy i b.dobrze, ale jeśli dojdzie do tego mały LEFT OUTER JOIN przy selecie, to już pojawiają się małe przekłamania w kolejności co mi wybitnie nie odpowiada. Da się to jakoś wymusić co by się nie grzebać dodatkowo w phpie? |
|
|
![]() |
![]()
Post
#2
|
|
![]() Grupa: Zarejestrowani Postów: 139 Pomógł: 10 Dołączył: 6.07.2007 Skąd: opole Ostrzeżenie: (0%) ![]() ![]() |
ORDER BY ID
![]() -------------------- |
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 7 Pomógł: 0 Dołączył: 18.12.2006 Ostrzeżenie: (0%) ![]() ![]() |
heheh, nie chcę sortować wg ID tylko pobierać wg podanej kolejności, która może się zmieniać.
|
|
|
![]()
Post
#4
|
|
![]() Grupa: Zarejestrowani Postów: 139 Pomógł: 10 Dołączył: 6.07.2007 Skąd: opole Ostrzeżenie: (0%) ![]() ![]() |
zle zrozumialem ;]
-------------------- |
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 48 Pomógł: 0 Dołączył: 4.10.2007 Ostrzeżenie: (0%) ![]() ![]() |
możesz spróbować tak:
create temp table t1 with oids as select * from tamta_tabela where id in (te tam ids); i wykonać joina wg przypisanych oids: select * from t1 left outer join ... order by t1.oid; Powinno sie udac. ale się nie uda ![]() operator IN nie gwarantuje że wiersze zostaną zwrócone w tej kolejności w jakiej się poda id czy jakiekolwiek atrybuty wg których następuje wyszukiwanie. |
|
|
![]()
Post
#6
|
|
Grupa: Zarejestrowani Postów: 69 Pomógł: 0 Dołączył: 22.07.2007 Ostrzeżenie: (0%) ![]() ![]() |
|
|
|
![]()
Post
#7
|
|
Grupa: Zarejestrowani Postów: 7 Pomógł: 0 Dołączył: 18.12.2006 Ostrzeżenie: (0%) ![]() ![]() |
|
|
|
![]()
Post
#8
|
|
Grupa: Zarejestrowani Postów: 48 Pomógł: 0 Dołączył: 4.10.2007 Ostrzeżenie: (0%) ![]() ![]() |
Hej, jeszcze się nie poddałem!
![]() Właśnie opracowałem pewien sprytny trick bazujący na wywołaniu funkcji generate_series(); zakładamy że chcemy wyświetlić wiersze "tamtej_tabeli" o ID = 32, 33800, 12 i tylko w tej kolejności: SELECT * FROM tamta_tabela JOIN (SELECT a[seq] AS id, seq FROM (SELECT ARRAY[32,33800,12] AS a )AS w, (SELECT generate_series(1,3)AS seq) AS q ) AS x ON x.id=tamta_tabela.id ORDER by x.seq; Problem może tylko być, że taki SQL (działając ze skryptu php) trzeba uzupełnić w dwóch miejscach: trzeba wpisać w konstruktor tablicy (ARRAY[]) odpowiednie id wierszy oraz mieć obliczoną wielkość tej tablicy aby wpisać do wywołania generate_series() ilość elementów tej tablicy. Pozdrawiam |
|
|
![]() ![]() |
![]() |
Wersja Lo-Fi | Aktualny czas: 25.07.2025 - 01:53 |