Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Szukanie rekordu wraz z innymi
Forum PHP.pl > Forum > Bazy danych > MySQL
TomASS
Witam. Jak powinno wygladać zapytanie, które wyszuka mi 1 rekord (np. o numerze 100) i zwróci mi go wraz z "pobocznymi" czyli np. 10 w jedną stronę oraz 10 w drugą (czyli 21 rekordów) .... da rade zrobić w ogóle coś takiego?
Kinool
zakladajac ze znasz numer kotrego szukasz np 100

  1. SELECT *
  2. FROM tablica
  3. WFERE id<100-10 AND id>100+10

hmm cos takiego mi przychodzi do glowy smile.gif
nospor
@Kinool ale to przypadku gdyby id byłyby kolejno numerowane. W praktyce żadko tak bywa. Często są dziury
Kinool
hehe to fakt ale jesli id jest typem "serial" no to zapytanie jest "niekompletne" tzn wyniki nie zawsze beda zgodne z prawda smile.gif

w jednym zapytaniu to chyba niewykonalne ale nie jestem pego pewien na 100% smile.gif
TomASS
Cytat
@Kinool ale to przypadku gdyby id byłyby kolejno numerowane. W praktyce żadko tak bywa. Często są dziury


Dokładnie, tym bardziej, że nie powiedziałem, że chodzi o index tabeli, tylko o jakąkolwiek wartość :/ wogólen nie mam pojęcia jak to zrobić :/

Ale dzięki smile.gif czekam na jeszcze smile.gif
spenalzo
Może coś w tym stylu?
Dla ID=100 i po 10 rekordów w obie strony...

  1. SELECT *
  2. FROM tabela
  3. ORDER BY id ASC LIMIT 90, 20


Edit:
aha... no to w takim razie to średnio zadziała, nie doczytałem dokładnie postów tongue.gif
SongoQ
Jesli chesz zwrocic zakres to sprawa prosta

  1. SELECT *
  2. FROM TABLE
  3. WHERE id >= 100 - 10 AND id <= 100 + 10


Jesli natomast chcesz zwrocic wedlug jakiejs kolejnosc ORDER BY to numerowanie rekordow o ile sie da lub kombinujac z podzapytaniem.
TomASS
Cytat(SongoQ @ 2006-02-07 12:08:07)
Jesli chesz zwrocic zakres to sprawa prosta

  1. SELECT *
  2. FROM TABLE
  3. WHERE id >= 100 - 10 AND id <= 100 + 10


Jesli natomast chcesz zwrocic wedlug jakiejs kolejnosc ORDER BY to numerowanie rekordow o ile sie da lub kombinujac z podzapytaniem.

No właśnie tak nie wchodzi w grę :/

A co masz na myśli pisząc "podzapytaniem"?
SongoQ
W profesjonalnych bazach danych sa takie rzeczy mozliwe w MySQL to pewnie raczej nikt nie przewidzial.

  1. SELECT *
  2. FROM (SELECT
  3. NUMROW, *
  4. FROM TABLE
  5. ORDER BY pole) WHERE warunek zakresu


Szukaj w dokumentacji podobnego zastosowania, tak jest przynajmniej w 2 bazach z ktorych korzystam
Unises
Potraktuj to tym:
  1. <?php
  2.  
  3. $SQL = 'SELECT * FROM punkty ORDER BY ABS('.$colum.'-'.$wartosc.') LIMIT 20';
  4.  
  5. ?>

gdzie
$colum=nazwa kolumny
$wartosc=100

___
Prosze uzywac bbCode
ActivePlayer
tort
Można to zrobić na przykład tak:
  1. (SELECT *
  2. FROM tabela
  3. WHERE id<100
  4. ORDER BY id DESC LIMIT 10)
  5. UNION
  6. (SELECT *
  7. FROM tabela
  8. WHERE id=100)
  9. UNION
  10. (SELECT *
  11. FROM tabela
  12. WHERE id>100
  13. ORDER BY id ASC LIMIT 10)

i masz 10 rekordów w jedną stronę, 10 w drugą, i ten, o który ci chodzi dokładnie w środku.

Można też zrobić to w ten sposób:
  1. SELECT *
  2. FROM tabela
  3. WHERE id=100 OR id
  4. IN (SELECT id
  5. FROM tabela
  6. WHERE id<100
  7. LIMIT 10) OR id
  8. IN (SELECT id
  9. FROM tabela
  10. WHERE id>100
  11. LIMIT 10)
  12. ORDER BY id

o ile dysponujesz podzapytaniami.
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.