Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Szukanie rekordu wraz z innymi
TomASS
post
Post #1





Grupa: Zarejestrowani
Postów: 1 660
Pomógł: 13
Dołączył: 9.06.2004
Skąd: Wrocław i okolice

Ostrzeżenie: (0%)
-----


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?


--------------------
Go to the top of the page
+Quote Post
Kinool
post
Post #2





Grupa: Zarejestrowani
Postów: 560
Pomógł: 0
Dołączył: 15.07.2003
Skąd: Kwidzyn

Ostrzeżenie: (0%)
-----


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

Ten post edytował Kinool 7.02.2006, 10:55:52


--------------------
Go to the top of the page
+Quote Post
nospor
post
Post #3





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




@Kinool ale to przypadku gdyby id byłyby kolejno numerowane. W praktyce żadko tak bywa. Często są dziury


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
Kinool
post
Post #4





Grupa: Zarejestrowani
Postów: 560
Pomógł: 0
Dołączył: 15.07.2003
Skąd: Kwidzyn

Ostrzeżenie: (0%)
-----


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


--------------------
Go to the top of the page
+Quote Post
TomASS
post
Post #5





Grupa: Zarejestrowani
Postów: 1 660
Pomógł: 13
Dołączył: 9.06.2004
Skąd: Wrocław i okolice

Ostrzeżenie: (0%)
-----


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


--------------------
Go to the top of the page
+Quote Post
spenalzo
post
Post #6





Grupa: Zarejestrowani
Postów: 2 064
Pomógł: 1
Dołączył: 22.01.2003
Skąd: Poznań

Ostrzeżenie: (0%)
-----


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

Ten post edytował spenalzo 7.02.2006, 11:07:52


--------------------

Go to the top of the page
+Quote Post
SongoQ
post
Post #7





Grupa: Przyjaciele php.pl
Postów: 2 923
Pomógł: 9
Dołączył: 25.10.2004
Skąd: Rzeszów - studia / Warszawa - praca

Ostrzeżenie: (0%)
-----


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.


--------------------
Go to the top of the page
+Quote Post
TomASS
post
Post #8





Grupa: Zarejestrowani
Postów: 1 660
Pomógł: 13
Dołączył: 9.06.2004
Skąd: Wrocław i okolice

Ostrzeżenie: (0%)
-----


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"?


--------------------
Go to the top of the page
+Quote Post
SongoQ
post
Post #9





Grupa: Przyjaciele php.pl
Postów: 2 923
Pomógł: 9
Dołączył: 25.10.2004
Skąd: Rzeszów - studia / Warszawa - praca

Ostrzeżenie: (0%)
-----


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


--------------------
Go to the top of the page
+Quote Post
Unises
post
Post #10





Grupa: Zarejestrowani
Postów: 24
Pomógł: 0
Dołączył: 6.02.2006

Ostrzeżenie: (0%)
-----


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


Ten post edytował ActivePlayer 7.02.2006, 18:27:43
Go to the top of the page
+Quote Post
tort
post
Post #11





Grupa: Zarejestrowani
Postów: 24
Pomógł: 0
Dołączył: 15.09.2005
Skąd: Lublin

Ostrzeżenie: (0%)
-----


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.


--------------------
tort
eX Blog
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 22.08.2025 - 02:35