Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Mysql wyrażenia regularne
rogeros
post
Post #1





Grupa: Zarejestrowani
Postów: 97
Pomógł: 0
Dołączył: 10.04.2002
Skąd: Pruszków

Ostrzeżenie: (10%)
X----


Witajcie w jednej kolumnie w bazie danych mam pewną tabelę która jest przez serialize przerobiona na string.
I tak wpadłem na pomysł żeby zrobić selekce danych już z poziomu bazy danych.
Dlatego mam takie pytanie.

czy za pomocą wyrażeń regularnych w mysql określić
  1. <?php
  2. a:5:{s:14:"TES 32 Dreamer";i:3;s:10:"Solina 800";i:8;s:15:"Tango 780 Sport";i:1;s:18:"Tango 780 Family S";i:10;s:12:"Nieokreslony";i:3;}
  3. ?>





ze wartość Solina 800 musi być większa od 0
czyli coś w stylu "Solina 800";i:(.*?);
i zmienna wyciagnieta musi byc wieksza od zera.

w tym przykladzie solina 800 ma wartosc 8




lub może jest funkcja podobna do explode za pomoca ktorej mógłbym sobie wyciąć co jest za 3-cim srednikiem.

W ogole nie mam pomyslu jak to ugryźć. Może ktoś mnie tu naprowadzi na dobrą drogę (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)



Witajcie kombinowałem całą noc (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
I udało mi się rozwiązać problem za pomocą takiego zapytania.

Może komuś na przyszłość się przyda.

  1. SELECT jachty, MID( jachty, LOCATE( 'Solina 800', jachty ) + LENGTH( 'Solina 800' ) +4, 1 ) AS wartosc
  2. FROM `jacht_crm` HAVING wartosc >0



A więc. Chcę wyświetlić wartość dla Solina 800 to:
szukam na jakiej pozycji w stringu znajduje się szukane słowo "Solina 800"
w moim przypadku słowo zaczyna się od 38 znaku w stringu.

mnie interesuje to co się znajduje za po tym stringu a dokladnie po "i:"

dlatego jeśli wiem na której pozycji znajduje się słowo Solina 800 (locate)
jesli wiemy jak długi jest string Solina 800 (length)
i dodamy ta STAŁĄ wartość jaka dzieli nas do wyniku czyli 4 znaki

to uzyskamy interesujace nas dane.


Oczywiscie Solina 800 w moim przypadku to marametr ktory w miare potrzeb jest zmieniany.

Pozdrawiam.
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
GrayHat
post
Post #2





Grupa: Zarejestrowani
Postów: 566
Pomógł: 18
Dołączył: 23.08.2003
Skąd: Łomża

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


Trochę odświeżę temat.

Mam pole `data`, o zawartości powiedzmy:

a:3:{i:0;s:15:"blebleblebleble";i:1;s:10:"2008-08-06";i:2;s:10:"2008-08-08";}

I teraz jak wyciągnąć rekordy, w których wartość wyżej pogrubiona (data) jest mniejsza od obecnej daty?
Doszedłem do takiego selecta:

  1. SELECT `data` AS date_from FROM contents WHERE `data` REGEXP 'i:1;s:[:0-9:]+:"(.*)";i:2'


i stoję w miejscu...

Proszę o pomoc.

Pozdrawiam



// edit

OK rozwiązałem problem. Rozwiązanie:

  1. SELECT `data`, UNIX_TIMESTAMP(MID( `data`, LOCATE( 'i:1;s:10:"', `data` ) + 10, 10 )) AS date_from
  2. FROM `contents` WHERE `type` = 'rally' HAVING date_from <span style='color:orange'>< UNIX_TIMESTAMP()


Ten post edytował GrayHat 6.08.2008, 11:18:31
Go to the top of the page
+Quote Post

Posty w temacie


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: 6.10.2025 - 23:40