Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Pobranie współrzędnych z bazy, jak pobrać minimalne współrzędne spełniające warunkiz bazy
arek50
post 14.12.2014, 21:56:42
Post #1





Grupa: Zarejestrowani
Postów: 25
Pomógł: 0
Dołączył: 13.11.2006

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


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.
Go to the top of the page
+Quote Post
mmmmmmm
post 14.12.2014, 23:56:59
Post #2





Grupa: Zarejestrowani
Postów: 1 421
Pomógł: 310
Dołączył: 18.04.2012

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


http://sqlfiddle.com/#!2/acd4be/6
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 Wersja Lo-Fi Aktualny czas: 19.06.2025 - 07:05