Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> SELECT BETWEEN jak nie wykonywać pustego przebiegu gdy id nie istnieje
amii
post
Post #1





Grupa: Zarejestrowani
Postów: 728
Pomógł: 76
Dołączył: 12.06.2009

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


Mam takie proste zapytanie, którym pobieram określoną ilość rekordów i wszystko byłoby ok gdy w tabeli pola id występują stale po sobie czyli np. 1,2,3,4,5 itd. Lekki problem jest gdy tabela ma taką strukturę id 1,2,3,11,12,13 wtedy skrypt dla wartości $min = 4 i $max = 5 wykona pusty przebieg.
Próbowałem to rozwiązać wczytując w pętli id do tablicy, tylko to jest nieefektywne, nieeleganckie i w ogóle be. Może jest jakaś inna metoda, może być też inne zapytanie byleby pobierało rekordy z jakiegoś przedziału.

  1. $zapytanie = "SELECT * FROM tabela WHERE id BETWEEN $min AND $max";
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
amii
post
Post #2





Grupa: Zarejestrowani
Postów: 728
Pomógł: 76
Dołączył: 12.06.2009

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


Cytat(nospor @ 18.01.2011, 17:14:14 ) *
order by oraz limit dziala na zestawie danych nie zależnie czy są miedzy nimi dziury czy nie wiec naprawde nie wiem w czym masz teraz problem.


W tym mam problem, że skrypt się i tak uruchomi na pustym zestawie bo takie są odczytywane wartości z bazy danych. Żeby to działało tak jak chce to musiałbym zmodyfikować zapisywanie wartości w bazie dla $min i $max a nie wiem jak to zrobić czyli jaki warunek dać w linii EPIC FAIL. Zresztą tak wygląda fragment kodu za to odpowiedzialny.

Program przy każdym uruchomieniu robi:

  1. CREATE TABLE `settings` (
  2. `id` int(11) NOT NULL AUTO_INCREMENT,
  3. `name` varchar(20) NOT NULL DEFAULT '',
  4. `value` varchar(255) NOT NULL DEFAULT '',
  5. PRIMARY KEY (`id`)
  6. ) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=7 ;
  7.  
  8. --
  9. -- Zrzut danych tabeli `settings`
  10. --
  11.  
  12. INSERT INTO `settings` (`id`, `name`, `value`) VALUES (1, 'proxy', '441'),
  13. (2, 'katalog', '579'),
  14. (3, 'licznik', '1'),
  15. (4, 'pula', '1'),
  16. (5, 'paginator', '10'),
  17. (6, 'limit', '460');


  1. //Funkcja pobiera ważne ustawienia z bazy danych
  2. function s($var) {
  3. connect_to_db();
  4.  
  5.  
  6. $query = 'SELECT name, value FROM settings';
  7. $result = mysql_query($query) or die('Nastapił błąd w zapytani udo bazy w funkcji settings: '. mysql_error());
  8. while ($r = mysql_fetch_assoc($result)) {
  9. $site_settings[$r['name']] = $r['value'];
  10. }
  11.  
  12. $value = $site_settings[$var];
  13. return $value;
  14. }
  15.  
  16. //czytanie przesuniecia w tabeli katalog
  17. $pobierz = "SELECT MIN(id) FROM main as wynik1";
  18. $zap = mysql_query($pobierz) or die('Nastapil blad w polaczeniu w zapytaniu do bazy w instrukcji 1 SELECT MIN(id) FROM id_katalog as wynik : '. mysql_error());
  19. $katalog_limit = mysql_fetch_array($zap); //pobranie wartosci minimalnej id z katalogi_id
  20. $katalog_limit_max = $katalog_limit['MIN(id)'] + s('katalog'); //limit dodan dla katalogow domyslnie 5
  21.  
  22.  
  23.  
  24.  
  25. $limit_dodan_katalogi = s('pula'); //pobieramy limit do katalogow z bazy
  26.  
  27. //i inkrementujemy wartosc przesunicia o limit po czym zapisujemy w bazie i tu jest pies pogrzebany bo niby jak inaczej to by maiło byc rozwiazne
  28. $pobierz5 = "UPDATE settings SET value=value+$limit_dodan_katalogi WHERE name='katalog'"; //LINIA EPIC FAIL
  29. $zap5 = mysql_query($pobierz5) or die('Nastapil blad w polaczeniu w zapytaniu do bazy w instrukcji UPDATE increment dla katalog : '. mysql_error());
Go to the top of the page
+Quote Post

Posty w temacie
- amii   SELECT BETWEEN jak nie wykonywać pustego przebiegu gdy id nie istnieje   18.01.2011, 12:36:22
- - nospor   [PHP] pobierz, plaintext $zapytanie = "SELECT...   18.01.2011, 12:40:12
- - wookieb   Czyli pole ID jest tekstem a nie numerem (czyli ta...   18.01.2011, 12:41:07
- - nospor   Cytatpamiętaj, żę beetween jest tu lepszeta, szcze...   18.01.2011, 12:42:57
- - wookieb   Czytam I biorę poprawkę na to, że autor tematu ch...   18.01.2011, 12:47:40
- - nospor   ALeż rozumie. I właśnie dlatego zadał pytanie na f...   18.01.2011, 13:02:28
- - amii   Tego chyba się jednak nie da rozwiązać tak jak teg...   18.01.2011, 13:44:55
- - nospor   CytatAle LIMIT tu nic nie zmienia bo program odczy...   18.01.2011, 17:14:14
- - thek   A ja bym zapytał skąd Ty bierzesz $min i ...   18.01.2011, 22:03:42
- - amii   Cytat(nospor @ 18.01.2011, 17:14:14 )...   19.01.2011, 09:25:34
- - thek   Po pierwsze to optymalizuj sobie. Skoro z bazy pob...   19.01.2011, 10:34:54
- - amii   sorki tam zostały stare komentarze chciałem edytow...   19.01.2011, 11:15:19
- - thek   Jeśli więc dobrze rozumiem (nie mam pewności, więc...   19.01.2011, 12:24:55
- - Pilsener   Skoro problem dotyczyCytati wszystko byłoby ok gdy...   19.01.2011, 12:44:06
- - amii   thek tak skrypt powinien działać w ten sposób jaki...   20.01.2011, 12:39:58
- - thek   Ale jak się uruchamia dla nie istniejących rekordó...   20.01.2011, 13:19:54
- - Pilsener   Możesz ponumerować rekordy jednym zapytaniem używa...   21.01.2011, 13:34:06


Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 3.10.2025 - 19:03