Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Pobranie współrzędnych z bazy
Forum PHP.pl > Forum > Bazy danych > MySQL
arek50
Potrzebuje małej pomocy w rozwiązaniu problemu.
Mam tabele z kolumnami wysokosc i szerokosc według których wykonuje różne operacje.
Teraz potrzebuję zapytanie mysql, które znajdzie mi współrzędne pozycji nie znajdującej się w tabeli.

Obrazowo wygląda to tak:
przykładowa tabela:
---------------------------------
| id | wysokosc | szerokosc |
----------------------------------
| 1| 3 | 2 |
| 2| 4 | 2 |
| 3| 4 | 3 |
| 4| 5 | 2 |
| 5| 5 | 3 |
| 6| 5 | 4 |
| 7| 6 | 2 |
| 8| 6 | 3 |
| 9| 6 | 4 |
|10| 6 | 5 |
|11| 7 | 2 |
|12| 7 | 5 |
|13| 7 | 6 |
----------------------------------
Na jej podstawie powstaje mi taka tablica wyników:
3,2 (wysokosc, szerokosc)
4,2 4,3
5,2 5,3 5,4
6,2 6,3 6,4 6,5
7,2 brak brak 7,5 7,6

W takim układzie mam dwie dziury: 7,3 7,4

Teraz potrzebuję takiego zapytania, które pomoże mi znaleźć najniższe możliwe współrzędne, których nie mam w tabeli.
Pominąłem 1,1, bo nie zawsze poszukiwania będę zaczynał od tych współrzędnych.

Doszedłem do takich wyników:
Zapytanie do pobrania całości danych z bazy wygląda tak:
Kod
SELECT * FROM `tabela` WHERE wysokosc>='3' and szerokosc>='2' and szerokosc<=wysokosc+2-3  order by wysokosc ASC

dla współrzędnych startowych 3,2. Pobranie danych i obróbka w php jest bezsensowna, bo pozycji będzie zbyt wiele. Czasem się przyda przy listowaniu i paginacji.


Próbowałem szukać danych po rzędach, ale to też nie rozwiązuje mojego problemu, bo to są kolejne zapytania do bazy. Szczególnie, że nie znam konkretnej wysokości. Oto moje zapytanie:


Kod

//zmienne startowe
$start_wys=3;
$start_sz=2;

//zapytanie mysql
SELECT id, wysokosc, szerokosc, szerokosc + 1 brakujaca_pozycja_sz
  FROM `tabela` t
WHERE NOT EXISTS
(
  SELECT *
    FROM `tabela`
   WHERE wysokosc='7' and szerokosc=t.szerokosc + 1 and szerokosc<=wysokosc+$start_sz-$start_wys
  
) and wysokosc='7' and  szerokosc>='$start_sz'  and szerokosc<=wysokosc+$start_sz-$start_wys-1
ORDER BY szerokosc
LIMIT 1


Ten kod wyszukuje mi w 7 wierszu dla pozycji o współrzędnych startowych 3,2

Jak znaleźć te współrzędne przeszukując całą tabelę nie znając wiersza, a mając tylko dane startowe?

Z góry dzięki za pomoc.
mmmmmmm
http://sqlfiddle.com/#!2/acd4be/6
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.