![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 175 Pomógł: 18 Dołączył: 11.06.2007 Skąd: Koszalin/Poznań Ostrzeżenie: (0%) ![]() ![]() |
Witam. Musze z pola w bazie danych mysql mogącego zawierać i liczby i tekst wydobyć tylko pierwsza liczbę. Musi się to odbyć w zapytaniu sql, bo będzie użyte w ORDER BY.
Przykładowo wygląda tak: Zawartość pola: "od 40 do 100", musze wydobyć: 40 Zawartość pola: "od 40", musze wydobyć: 40 Zawartość pola: "40-100", musze wydobyć: 40 Zawartość pola: "40", musze wydobyć: 40 Zawartośc pola: "40 do 100", musze wydobyć: 40 Próbowałem z funkcją SUBSTRING_INDEX, i rozbijanie po spacji, ale to nie daje satysfakcjonujących wyników. CAST AS UNSIGNED również nie działa tak jak bym tego oczekiwał. Ten post edytował elektrrrus 21.09.2008, 00:22:57 |
|
|
![]() |
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 238 Pomógł: 1 Dołączył: 27.08.2003 Ostrzeżenie: (0%) ![]() ![]() |
najlepiej będzie wykorzystać do tego wyrażenia regularne
http://dev.mysql.com/doc/refman/5.0/en/regexp.html |
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 175 Pomógł: 18 Dołączył: 11.06.2007 Skąd: Koszalin/Poznań Ostrzeżenie: (0%) ![]() ![]() |
Nie o to mi chodziło...
Z tego co rozumiem, REGEXP w mysql zwraca tylko wartości 0 jeśli dane pole nie spełnia wyrażenia, i 1 jeśli spełnia. Mi nie chodzi o sprawdzanie czy dane pole spełnia wyrażenie, tylko wyciągnięcie z danego pola fragmentu, który pasowałby do patternu, tak jak to można zrobić w php-owej funkcji preg_match podająć jako trzeci argument nazwę tablicy do której te dopasowywania będzie przypisywać. Wiem, mogę takie coś zrobić po stronie php, i wtedy odpowiednio posortować, ale wiążę się to z napisałem sporego kawałka kodu, dlatego pytam się, czy można coś takiego zrobić samym zapytaniem do mysql. |
|
|
![]()
Post
#4
|
|
Grupa: Zarejestrowani Postów: 288 Pomógł: 12 Dołączył: 2.12.2005 Ostrzeżenie: (0%) ![]() ![]() |
A czemu CAST(... AS UNSIGNED) nie działa tak jakbyś oczekiwał?
|
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 175 Pomógł: 18 Dołączył: 11.06.2007 Skąd: Koszalin/Poznań Ostrzeżenie: (0%) ![]() ![]() |
W polu, które zaczyna się od litery zwraca 0.
Na zawartość pola: "od 40 do 100", zwraca "0" |
|
|
![]()
Post
#6
|
|
Grupa: Zarejestrowani Postów: 1 333 Pomógł: 137 Dołączył: 25.03.2008 Skąd: jesteś?? Ostrzeżenie: (0%) ![]() ![]() |
Zawsze możesz pobrać pierwszy znak i określić czy jest liczbą jak rak to zapisujesz do zmiennej następnie sprawdzasz drugi jak jest to zapisujesz i trzeci jak nie jest to kończysz przeszukiwanie.
Przykład: qw12eqwq 1. Sprawdza pierwszą - 0 2. Sprawdza drugą - 0 3. Sprawdza trzecią - 1 (1) zapisuje do zmiennej 4. Sprawdza czwartą - 1 (2) dopisujesz do zmiennej 5. Sprawdza piątą - 0 6. Koniec ponieważ po liczbie nastąpił znak który nie jest liczbą Mój pomysł, może lekko dziwny ale to nic... (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg) |
|
|
![]()
Post
#7
|
|
Grupa: Zarejestrowani Postów: 175 Pomógł: 18 Dołączył: 11.06.2007 Skąd: Koszalin/Poznań Ostrzeżenie: (0%) ![]() ![]() |
O kurcze (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
Aż tak dobry to ja z sql nie jestem, ale popatrze jak się robi procedury w mysql, może coś mi z tego wyjdzie. Tylko teraz inny problem, co będzie szybsze, czy procedura w mysql, czy pobranie wszytskiego i przemielenie tego po stronie php? |
|
|
![]()
Post
#8
|
|
Grupa: Zarejestrowani Postów: 1 333 Pomógł: 137 Dołączył: 25.03.2008 Skąd: jesteś?? Ostrzeżenie: (0%) ![]() ![]() |
Osobiście nie lubię sql i wszystko co mogę wykonuję po stronie php oczywiście bez przesady...
A z prędkością z tego co wiem to różnie bywa w zależności od tego co chcesz uzyskać i w jaki sposób napiszesz zapytanie... |
|
|
![]()
Post
#9
|
|
Grupa: Zarejestrowani Postów: 175 Pomógł: 18 Dołączył: 11.06.2007 Skąd: Koszalin/Poznań Ostrzeżenie: (0%) ![]() ![]() |
Spróbuje napisac i w jeden i drugi sposób, zobaczymy co będzie szybsze...
Dzięki za pomoc i wskazówki. |
|
|
![]() ![]() |
![]() |
Aktualny czas: 22.08.2025 - 15:53 |