Arkadiusz Zielazny opis
Temat: Problem w zapytaniem mysql
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:
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:
//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.