elektrrrus
20.09.2008, 23:16:59
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ł.
maciu
21.09.2008, 10:46:16
najlepiej będzie wykorzystać do tego wyrażenia regularne
http://dev.mysql.com/doc/refman/5.0/en/regexp.html
elektrrrus
21.09.2008, 13:58:05
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.
tommy4
21.09.2008, 15:02:47
A czemu CAST(... AS UNSIGNED) nie działa tak jakbyś oczekiwał?
elektrrrus
21.09.2008, 17:07:04
W polu, które zaczyna się od litery zwraca 0.
Na zawartość pola: "od 40 do 100", zwraca "0"
ShadowD
21.09.2008, 17:32:49
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...
elektrrrus
21.09.2008, 19:12:15
O kurcze

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?
ShadowD
21.09.2008, 19:30:39
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...
elektrrrus
21.09.2008, 20:18:59
Spróbuje napisac i w jeden i drugi sposób, zobaczymy co będzie szybsze...
Dzięki za pomoc i wskazówki.
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.