Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Pobieranie ID nastepnego rekordu wg okreslonych warunków
Forum PHP.pl > Forum > Bazy danych > MySQL
Athlan
Może temat niewiele mowi ale zaraz opisze guitar.gif

Posiadam następującą tabele:
- ID (int 11)
- text (text)
- type (enum: 1, 2, 3, 4)

i takie dane:

Kod
| ID | text | type |
| 1  | aaa  | 1
| 2  | bbb  | 1
| 4  | ccc  | 2
| 5  | ddd  | 1
| 10 | eee  | 4


i teraz przy wybieraniu pewnego elementu wg warunku: WHERE id = 2 AND type = 1 chciałbym otrzymać przyciski NEXT, PREVIOUS, ale o id: PREV = 1, NEXT = 4.

Chyba kazdy jaży ocb ?

Generalnie zapytanie ma sprawdzac najbliższy poprzedni ID ze swojego typu i najbliższy następny ID ze swojego typu, czyli w tym przypadku, następny = 1, poprzedni = 4

Pozdro smile.gif
Apo
użyj do tego union oraz waruków <, > i LIMIT winksmiley.jpg
Athlan
fajnie... ale jak tongue.gif UNION łączy zapytania, a po co warunki < i > ?

wytłumacz swoją ideeę smile.gif
Apo
warunkami najdziesz mniejsze id i wieksze. przykad:
UNION SELECT id WHERE id > $id LIMIT 1 i juz masz większe o 1 smile.gif itd
Athlan
No zakladamy że zrobilem biggrin.gif:

następny:
  1. SELECT id FROM itemki WHERE type = 1 AND id > $useID LIMIT 0, 1

poprzedni:
  1. SELECT id FROM itemki WHERE type = 1 AND id < $useID LIMIT 0, 1

aktualny:
  1. SELECT text FROM itemki WHERE type = 1 AND id = $useID


i teraz jak połączyć te zapytania w jedo używając UNION bo jakoś tego nie czaje?

EDIT --

Okay mam:

  1. SELECT id FROM itemki WHERE type = 1 AND id > 2 LIMIT 0, 1
  2. UNION
  3. SELECT id FROM itemki WHERE type = 1 AND id < 2 LIMIT 0, 1
  4. UNION
  5. SELECT id FROM itemki WHERE type = 1 AND id = 2
nospor
ja tylko przeniose bo z php ma to malo wspolnego
Athlan
Czesc...

mam sobie 2 zapytania:
  1. SELECT art_id FROM portfolio_arts WHERE art_type = 4 AND art_id > 29 LIMIT 0, 1

  1. SELECT art_id FROM portfolio_arts WHERE art_type = 4 AND art_id < 29 LIMIT 0, 1

wywołane osobno działają jak należy ale jak je połącze w ten sposób:
  1. SELECT art_id FROM portfolio_arts WHERE art_type = 4 AND art_id > 29 LIMIT 0, 1
  2. UNION
  3. SELECT art_id FROM portfolio_arts WHERE art_type = 4 AND art_id < 29 LIMIT 0, 1

to niestety zwraca się tylko 1 zapytanie... próbowałem równiez UNION ALL
co robię źle ?
pozdrawiam smile.gif
nospor
No i zagladamy do manuala i....
....i wszystko jasne smile.gif
http://dev.mysql.com/doc/refman/5.0/en/union.html

  1. (SELECT art_id FROM portfolio_arts WHERE art_type = 4 AND art_id > 29 LIMIT 0, 1)
  2. UNION
  3. (SELECT art_id FROM portfolio_arts WHERE art_type = 4 AND art_id < 29 LIMIT 0, 1)

a teraz? smile.gif
Athlan
a dziala smile.gif

ale zastanawia mnie jedna rzecz... dlaczego dzialal moj przyklad z postu #5 po edycji bez nawiasow... zrobilem moje zapytanie analogicznie do tamtego smile.gif
nospor
Tylko, ze w tamtym przykladzie nie miales na koncu limit. Ostatni limit bez nawiasow ogranicza cale zapytanie
Athlan
dzieki wielkie za wytłumaczenie... sam bym do tego nie doszedł smile.gif

pozdrawiam Nospor smile.gif
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.