Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL][PHP] Wyciąganie pozycji rekordu w bazie na podstawie jego id.
Forum PHP.pl > Forum > Przedszkole
krzywy36
Mam sobie tabele photos w niej takie pola jak photo_id itp.
Teraz, jak na podstawie id zdjęcia wyciągnąć jego pozycję (liczbę którą mogę wstawić w 'x' tu: "SELECT * FROM photos LIMIT x, 5")?.
Chodzi o to, że mam sobie zdjęcie wyświetlane na stronie i muszę pobrać 5 kolejnych zdjęć obok niego.

Z góry dzięki za pomoc winksmiley.jpg
mls
  1. SELECT * FROM photos WHERE photo_id > (identyfikator zdjęcia) ORDER BY photo_id ASC LIMIT 5
krzywy36
hmm a może masz jeszcze pomysł jak wyciągnąć 5 obrazków ale żeby ten którego mam id był w środku czyli, 2 przed nim i 2 po nim ^^
obrazki można usuwać więc id nie jest co 1.
#luq
Oczywiście unią.

  1. (
  2. SELECT *
  3. FROM photos
  4. WHERE photo_id < {12}
  5. ORDER BY photo_id
  6. LIMIT 5
  7. )
  8. UNION (
  9.  
  10. SELECT *
  11. FROM photos
  12. WHERE photo_id > {12}
  13. ORDER BY photo_id
  14. LIMIT 5
  15. )


{12} to przykładowe id. Jak wstawić w środek rekord o danym id to już chyba będziesz wiedział jak winksmiley.jpg
krzywy36
nie mam jak tego teraz sprawdzić, ale to nie będzie czasem pobierać 5 pierwszych rekordów z bazy, zakładając, że w bazie jest 20 rekordów, to pobierze najpierw 5 pierwszych (z id mniejszym od 12) i potem doda 5 kolejnych (z id > 12) a raczej nie o to chodzi ;/ dobrze myśle?
nospor
Cytat
dobrze myśle?
Dobrze, ale bardzo ograniczenie... a co ci szkodzi zamiast liczby 5 wstawic liczbe 2?
krzywy36
już sama liczba jest nie ważna, chodzi mi o to, że:
mam sobie 20 rekordów w tabeli które mają id kolejno od 1 do 20
więc czy to zapytanie nie pobierze mi rekordow o id: 1; 2; 3; 4; 5; a potem doda do nich kolejnych 5 tym razem o id 13; 14; 15; 16; 17?
mortus
To kwestia sortowania, dane z pierwszego SELECT-a sortujesz przez ORDER BY photo_id DESC.
krzywy36
mam jeszcze jeden problem, mam takie zapytanie:
  1. (SELECT * FROM photos WHERE photo_id < ".$_GET['id']." AND photo_category = ".$photo['photo_category']." ORDER BY photo_id DESC LIMIT 2) UNION (SELECT * FROM photos WHERE photo_id >= ".$_GET['id']." AND photo_category = ".$photo['photo_category']." ORDER BY photo_id LIMIT 3)

i niby wszystko działa, pobiera ono 5 rekordów z bazy z "moim" rekordem w środku tylko, że:
zakładając że mój rekord ma id 41 to pobrane dane wyglądają tak:
40
39
41
42
43

Pierwsze dwa rekordy są pobierane "od tyłu", więc jak zrobić żeby wszystkie zwrócone dany były uporządkowane rosnąco?
mortus
Dane można posortować na dwa sposoby. Pierwszy, to posortowanie wyników z pierwszego SELECT-a jeszcze przed złączeniem UNION. Drugi to posortowanie całości. Drugi sposób jest prostszy, choć nie sprawdzałem, czy rzeczywiście działa. Ale wypróbuj:
  1. SELECT * FROM (TUTAJ ZAPYTANIE Z UNION) temp ORDER BY photo_id;
krzywy36
  1. (SELECT * FROM photos WHERE photo_id < ".$_GET['id']." AND photo_category = ".$photo['photo_category']." ORDER BY photo_id DESC LIMIT 2) UNION (SELECT * FROM photos WHERE photo_id >= ".$_GET['id']." AND photo_category = ".$photo['photo_category']." ORDER BY photo_id LIMIT 3) ORDER BY photo_id

działa, dzięki winksmiley.jpg
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.