Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [SQL] Select dla id z przerwami
Forum PHP.pl > Forum > Przedszkole
sadistic_son
Cześć. Czy da się zrobić w SQL zapytanie które wyświetli ID których różnica do następnego lub poprzedniego wynosi X ? Innymi słowy załóżmy że mam w bazie rekordy o id kolejno od 1 do 100, ale nie ma od 101 do 120. Potem od 121 jest dalej do 300. Za X przyjmuje 10 więc zapytanie powinno mi zwrócić 2 wartości tj. 100 oraz 121, bo 121 minus 100 jest większe równe 10. Da się tak samym SQL? Php to wiem jak to zrobić ale jest to nieoptymalne rozwiązanie.
Dzięki z góry.
trueblue
Jeśli dobrze rozumiem chcesz wybrać co X-ty wiersz. Tu przykład dla co dziesiątego.

  1. SELECT * FROM
  2. (
  3. SELECT @numer:=@numer+1 AS numer, t.*
  4. FROM (SELECT @numer:=0) AS n, tabela AS t
  5. ) AS tmp
  6. WHERE numer%10=0;
sadistic_son
Nie nie, nie co x-ty. Chcę wyszukać luki we wierszach większe niż X. Popatrz:
Kod
//ID:
1
2
3
4
5
6
7
8
9
10
11
//kilka usuniętych rekordów
15
16
//kilka usuniętych rekordów
20
//kilka usuniętych rekordów - tu 10 (lub więcej)
31
32
33
34
35
36

Przyjmuję że x=10 więc powinno mi wyświetlić id 20 oraz id 31. Lub chociaż 20 lub 31.
viking
A tak z ciekawości, po co ci to?
trueblue
  1. SELECT t1.id, t2.id
  2. FROM (
  3. SELECT @numer:=@numer+1 AS numer, id
  4. FROM tabela, (SELECT @numer:=0) AS n
  5. ) AS t1
  6. INNER JOIN (
  7. SELECT @numer2:=@numer2+1 AS numer, id
  8. FROM tabela, (SELECT @numer2:=0) AS n
  9. ) AS t2 ON CAST(t2.id AS SIGNED)- CAST(t1.id AS SIGNED)>=10 AND t2.numer-t1.numer=1
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.