Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP, MySQL] Wybranie odpowiedniego rekordu [SELECT]
Forum PHP.pl > Forum > PHP
Aryman
Witam,
Od razu chciałbym zaznaczyć że dopiero zaczynam z językami PHP i MySQL, traktuje to bardziej jako hobby oraz naprawdę coś przyjemnego biggrin.gif.

Nie mogę nigdzie znaleźć odpowiedzi na swoje pytanie. Chciałbym uzyskać funkcję która obliczy mi z przedziału licz najmniejsze puste miejsce.

Chodzi o to że wyobraźcie sobie tabliczkę czekolady, posiada załóżmy 40 kawałków. Nagle ktoś wyciąga ze środka jeden kawałek i z końca drugi kawałek.
Funkcja miała by polegać na obliczeniu pierwszego pustego miejsca, nie tego drugiego, nie ostatniego lecz pierwszego.

Dokładniej mój problem wygląda tak:

Potrzebuje uzupełniać pewien program kawałek po kawałku. Takich kawałków jest aż 45. Liczymy od 0 do 44!. Więc zakres 0 - 44.
Gdyby chodziło o tylko wypełnianie pustych 45 kwadratów kawałkami, nie było by problemu. Lecz jest możliwość wyjęcia w dowolnej chwili dowolnego kawałka, kwadracika haha.gif.

Załóżmy mamy takie rekordy:


Kod
0    
1    
2    
3    
5    
7    
10    
13    
15    
16    
19    
20    
21    
22    
37    
38    
40    
41    
42    
44    
45



Widzimy ile posiada pustych pól po segregacji, no i problem w tym że chciałbym automatycznie zmienną po wpisaniu np. numeru ID grupy tych rekordów, aby dodał PIERW najmniejszy brakujący element. Czyli w tym wypadku 4. Gdy 4 dopisze, miałby uzupełnić "6" itd. W wypadku gdy znowu wyciągniemy, on wraca i uzupełnia pierwszy brakujący.

Nie wiem, nie mam zielonego pojęcia jak ustawić "SELECT" z jakim atrybutem sad.gif dopiero zaczynam z tymi językami, Wiem że są łatwe, ale bez pomocy jednak ciężko.
Gdyby ktoś byłby tak miły i pomógł mi w ustaleniu tej funkcji zmiennej.
lukaskolista
Nie wiem, czy dobrze Cie zrozumialem, wiec moge nie rozwiazac Twojego problemu. Moze po prostu pobierz identyfikatory wszystkich "kawalkow" (rekordow) i przelec je petla po kolei sprawdzajac, czy identyfikator kolejnego rekordu jest o 1 wiekszy od poprzedniego. Jezeli jest wiekszy, niz o 1 to znaczy, ze czegos brakuje i trzeba to uzupelnic. Zapytania insert (te ktore dodaje brakujace kawalki) zapisuj do zmiennej i wykonaj za petla (zamiast przykladowo 10 zapytan wykonasz 1 zapytanie dodajace brakujace kawalki)
Aryman
Cytat(lukaskolista @ 12.12.2010, 07:10:59 ) *
Nie wiem, czy dobrze Cie zrozumialem, wiec moge nie rozwiazac Twojego problemu. Moze po prostu pobierz identyfikatory wszystkich "kawalkow" (rekordow) i przelec je petla po kolei sprawdzajac, czy identyfikator kolejnego rekordu jest o 1 wiekszy od poprzedniego. Jezeli jest wiekszy, niz o 1 to znaczy, ze czegos brakuje i trzeba to uzupelnic. Zapytania insert (te ktore dodaje brakujace kawalki) zapisuj do zmiennej i wykonaj za petla (zamiast przykladowo 10 zapytan wykonasz 1 zapytanie dodajace brakujace kawalki)



O Właśnie, dobrze to opisałeś, jak zrobić pętle sprawdzającą? Mógłbyś pomóc?smile.gif
Pozdrawiam ;D
lord2105
Proszę zapytanie, które wskaże Ci pierwszy wolny rekord wystarczy troszkę dopisać w PHP i gotowe smile.gif

  1. SELECT t1.id + 1 AS id FROM tabela t1 LEFT JOIN tabela t2 ON t1.id = t2.id + 1 WHERE t2.id IS NULL ORDER BY t1.id LIMIT 1
Aryman
Hmmm kod mi trochę mówi ale nadal nie mogę dojść jak to zrobić.
Mam takie wyniki, rekordy w bazie:

Kod
owner_ID          window                   pos    count
27                         MALL            2    1
27                    MALL             1    1
27                    MALL             0    1
27                    MALL            3    1
27                    MALL                6    1
27                    MALL            7    1
27                    MALL                18    1


Chodzi o to aby SELECT wybrał mi brakujące pole aby potem INSERT'em wsadzić odpowiedni REKORD z brakującą zmienną $pos.

SELECT musi wybrać pusty "pos" "WHERE owner_ID = '27' AND window = 'MALL'"
Nie mam tam rekordu typu
27 MALL NULL count i rekordy nie są segregowane w bazie, wszystko musi robić zapytanie sad.gif.
Próbowałem pokombinować z Twoim zapytaniem ale nie mogłem nic zdziałać.
Pozdrawiam Ary
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.