Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Wyciągnięcie zakresu rekordów
adiseq
post
Post #1





Grupa: Zarejestrowani
Postów: 31
Pomógł: 0
Dołączył: 20.11.2011

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


Cześć,

Mam problem z zapytaniem do bazy. Chcę wyciągnąć z tabeli user rekordy których nazwa zaczyna się na literkę z zakresu A-E. Próbowałem na dwa sposoby: LIKE i REGEXP.
Zapytanie LIKE:
  1. SELECT * FROM users WHERE nazwa LIKE '[A-E]%'

Niestety, takie zapytanie nie wyświetla żadnego rekordu.
Przy zapytaniu REGEXP jest trochę lepiej, ale i tak nie wyświetla wszystkich rekordów tak jak powinno :/
Np. przy zapytaniu
  1. SELECT * FROM user WHERE nazwa REGEXP '^[A-Z]'

które powinno wyświetlić wszystkie rekordy, to wyświetla mi 7/9 i nie wiem dlaczego tamte 2 opuszcza. Natomiast zapytanie
  1. SELECT * FROM user WHERE nazwa REGEXP '^A'
powinno wyświetlić wszystkie rekordy gdzie nazwa zaczyna się na A, a wyświetla 3 rekordy na 4 w których nazwa zaczyna się na A.
Wiecie w czym może być problem? Może mieć to coś związanego z typem tabeli? Typ ustawiony mam na varchar(128).

Pozdrawiam,
Adrian
Go to the top of the page
+Quote Post
mmmmmmm
post
Post #2





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

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


Skoro ci wyświetla mniej, to znaczy, że pozostałe nie spełniają warunków. Sorry, za tyle informacji tylko tyle można powiedzieć.
Go to the top of the page
+Quote Post
trueblue
post
Post #3





Grupa: Zarejestrowani
Postów: 6 806
Pomógł: 1828
Dołączył: 11.03.2014

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


Nie masz czasem spacji na początku tych niewybranych ciągów znaków?
Go to the top of the page
+Quote Post
adiseq
post
Post #4





Grupa: Zarejestrowani
Postów: 31
Pomógł: 0
Dołączył: 20.11.2011

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


no właśnie nie... :/ Mam 4 rekordy o nazwach: "ABC" "Abracadabra" "After Party" i "All We Can".
Przy zapytaniu:
  1. SELECT * FROM user WHERE nazwa REGEXP '^[A-E]' ORDER BY nazwa ASC"
wyświetla po kolei: Abracadabra, After Party i All We Can
a jak z zapytania usunę sortowanie czyli:
  1. SELECT * FROM user WHERE nazwa REGEXP '^[A-E]'
wyświetla po kolei: ABC, Abracadabra i After Party
Jak to możliwe? :/
Przy zapytaniu:
  1. SELECT * FROM user WHERE nazwa REGEXP '^[A-E]*'

wyświetla wszystkie 9 rekordów (nawet te zaczynające się na literkę Z)
Go to the top of the page
+Quote Post
mmmmmmm
post
Post #5





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

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


Do do sortowania... Dodaj (a jeśli masz, to wcześniej usuń) indeks na pole nazwa. Nie pomoże, to spróbuj naprawić tabelę.
Co do '^[A-E]*' wyświetla prawidłowo (nawet te zaczynające się na Z). * bowiem oznacza 'zero or more times'
Go to the top of the page
+Quote Post
adiseq
post
Post #6





Grupa: Zarejestrowani
Postów: 31
Pomógł: 0
Dołączył: 20.11.2011

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


Indeks do pola nazwa nic nie daje :/
Co masz na myśli pisząc, spróbuj naprawić tabelę?
Go to the top of the page
+Quote Post
trueblue
post
Post #7





Grupa: Zarejestrowani
Postów: 6 806
Pomógł: 1828
Dołączył: 11.03.2014

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


A mógłbyś pokazać co daje:
  1. SELECT ASCII(nazwa) FROM user

dla niewybieranych rekordów?
Go to the top of the page
+Quote Post
adiseq
post
Post #8





Grupa: Zarejestrowani
Postów: 31
Pomógł: 0
Dołączył: 20.11.2011

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


Cytat(trueblue @ 19.10.2016, 11:35:26 ) *
A mógłbyś pokazać co daje:
  1. SELECT ASCII(nazwa) FROM user

dla niewybieranych rekordów?

Wpisując to zapytanie zwraca mi 9 pustych rekordów, tj. bez danych takich jak adres, miejscowosc, nazwa itd.

a tak w ogóle to mam taki kod na wyświetlanie:
  1. <?php
  2. ini_set("display_errors", 0);
  3. require_once 'dbconnect.php';
  4. $polaczenie = mysqli_connect($host, $user, $password);
  5. mysqli_query($polaczenie, "SET CHARSET utf8");
  6. mysqli_query($polaczenie, "SET NAMES 'utf8' COLLATE 'utf8_polish_ci'");
  7. mysqli_select_db($polaczenie, $database);
  8.  
  9.  
  10.  
  11. $rezultat = mysqli_query($polaczenie, "SELECT ASCII(nazwa) FROM user");
  12. $ile = mysqli_num_rows($rezultat);
  13.  
  14.  
  15. $row = mysqli_fetch_assoc($rezultat);
  16. $nazwa = $row['nazwa'];
  17. $nip = $row['nip'];
  18. $kodp = $row['kodp'];
  19. $miejscowosc = $row['miejscowosc'];
  20. $ulica = $row['ulica'];
  21. $strona = $row['strona'];
  22. $wizyt = $row['wizyt'];
  23.  
  24. ?>
  25.  
  26. <?php
  27. $nr = 0;
  28. while ($row = mysqli_fetch_assoc($rezultat)) {
  29. ?>
  30. <div class="rekord">
  31. <div class="nazwa"><?php echo $row['nazwa']?></div>
  32. <div class="row">
  33. <div class="col-sm-4 text-center"><label>Kod pocztowy:</label> <?php echo $row['kodp']?></div>
  34. <div class="col-sm-4 text-center"><label>Miejscowość:</label> <?php echo $row['miejscowosc']?></div>
  35. <div class="col-sm-4 text-center"><label>Adres:</label> <?php echo $row['ulica']?></div>
  36. </div>
  37. <div class="row">
  38. <div class="col-sm-4 text-center"><label>NIP:</label> <?php echo $row['nip']?></div>
  39. <div class="col-sm-4 text-center"><label>Telefon:</label> <?php echo $row['telefon']?></div>
  40. <div class="col-sm-4 text-center"><label>Strona:</label> <?php echo $row['strona']?></div>
  41. <div class="przycisk">
  42. <a href="<?php echo $row['wizyt']?>"><button class="btn btn-danger btn-lg" type="submit" style="font-size:12px;">Zobacz wizytówkę</button></a>
  43. </div>
  44. </div>
  45. </div>
  46. <?php $nr++; }
  47.  
  48. ?>
Go to the top of the page
+Quote Post
trueblue
post
Post #9





Grupa: Zarejestrowani
Postów: 6 806
Pomógł: 1828
Dołączył: 11.03.2014

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


Chciałbym abyś pokazał wynik tego zapytania bezpośrednio z bazy danych (poprzez PHPMyAdmin czy inne narzędzie).

mysqli_fetch_assoc wywołujesz raz przed pętlą.
Go to the top of the page
+Quote Post
adiseq
post
Post #10





Grupa: Zarejestrowani
Postów: 31
Pomógł: 0
Dołączył: 20.11.2011

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


0
197
70
65
80
65
65
65
70
90

0 jest to konto administratora przy którym nie ma nazwy

o to chodziło?

hmm jak sprawdzam zapytania w phpmyadmin to taki zapis:
  1. SELECT * FROM user WHERE nazwa REGEXP '^[A-E]' ORDER BY nazwa ASC

działa bez zarzutu, dlaczego więc na stronie nie wyświetla wszystkich rekordów? :/
Go to the top of the page
+Quote Post
trueblue
post
Post #11





Grupa: Zarejestrowani
Postów: 6 806
Pomógł: 1828
Dołączył: 11.03.2014

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


A sprawdzałeś co się dzieje po usunięciu nadmiarowego wywołania mysqli_fetch_assoc?
Go to the top of the page
+Quote Post
adiseq
post
Post #12





Grupa: Zarejestrowani
Postów: 31
Pomógł: 0
Dołączył: 20.11.2011

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


Cytat(trueblue @ 19.10.2016, 12:19:40 ) *
A sprawdzałeś co się dzieje po usunięciu nadmiarowego wywołania mysqli_fetch_assoc?

Działa! (IMG:style_emoticons/default/smile.gif)
Zostawiłem wywołanie w pętli while a to pierwsze usunąłem i działa jak powinno (IMG:style_emoticons/default/smile.gif)
Dzięki wielkie bo już od kilku dni nad tym walczę (IMG:style_emoticons/default/smile.gif)
Pozdrawiam,
Adrian

Nie chcę zakładać nowego tematu, ale mam jeszcze problem z wyświetleniem rekordu który zaczyna się na polski znak.
W tabeli kodowanie mam ustawione na utf8_polish_ci

W kodzie mam:
mysqli_query($polaczenie, "SET CHARSET utf8");
mysqli_query($polaczenie, "SET NAMES 'utf8' COLLATE 'utf8_polish_ci'");

Gdzie może być błąd?
Go to the top of the page
+Quote Post
trueblue
post
Post #13





Grupa: Zarejestrowani
Postów: 6 806
Pomógł: 1828
Dołączył: 11.03.2014

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


Gdybyś opisał problem choć dwoma słowami więcej, myślę, że byłoby łatwiej go rozwiązać.
Go to the top of the page
+Quote Post
adiseq
post
Post #14





Grupa: Zarejestrowani
Postów: 31
Pomógł: 0
Dołączył: 20.11.2011

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


Nie wyświetla mi rekordu w którym nazwa zaczyna się na polski znak np. "Łódź"

Nawet po wpisaniu w phpmyadmin zapytania
  1. SELECT * FROM user WHERE nazwa REGEXP '^[A-Z]' ORDER BY nazwa ASC

Nie wyświetliło tego rekordu
Go to the top of the page
+Quote Post
trueblue
post
Post #15





Grupa: Zarejestrowani
Postów: 6 806
Pomógł: 1828
Dołączył: 11.03.2014

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


REGEXP nie za bardzo się do tego nadaje, ale:
  1. SELECT * FROM user WHERE nazwa REGEXP '^([A-Z]|Ł)'

Tylko właściwie po co ten warunek? Dlaczego nie wyświetlasz wszystkich użytkowników?
Go to the top of the page
+Quote Post
adiseq
post
Post #16





Grupa: Zarejestrowani
Postów: 31
Pomógł: 0
Dołączył: 20.11.2011

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


Bo wyświetlanie wyników podzieliłem sobie na 4 zakładki: A-E, F-M, N-T i U-Z
Muszę tylko podopisywać polskie znaki do zapytań.
Jeszcze raz dzięki wielkie (IMG:style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post

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: 23.08.2025 - 19:39