Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [mysql] filtracja + edycja bazy.
Hpsi
post
Post #1





Grupa: Zarejestrowani
Postów: 483
Pomógł: 50
Dołączył: 15.03.2005
Skąd: Poznań

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


Witam mam pewien problem i nie wiem jak do niego w ogole się zabrać.
mam sobie tabele:
Kod
+------------+---------------+------+-----+---------+----------------+
| Field      | Type          | Null | Key | Default | Extra          |
+------------+---------------+------+-----+---------+----------------+
| id         | int(11)       | NO   | PRI | NULL    | auto_increment |
| ui_id      | int(11)       | NO   | MUL | NULL    |                |
| nazwa      | varchar(1024) | NO   |     | NULL    |                |
| data       | date          | NO   | MUL | NULL    |                |
| link       | varchar(255)  | NO   |     | NULL    |                |
+------------+---------------+------+-----+---------+----------------+


i problem mój polega na tym. że z powodu mi bliżej nieznanego (podejrzewam user fail) wpisy się źle dodały tj:

w polu nazwa mam na przykład coś takiego:

http://forum.php.pl/index.php?showtopic=17...mp;#entry876760 mysql_real_escape_string a PDO

no i problem polega na tym że jak widać nie powinno się dawać linka w nazwię tylko osobno w polu link.

Teraz moje pytanie jak to najlogiczniej zrobić taką mała filtracje, że jeżeli pierwszy ciąg znaków jest linkiem, wycina mi go i przenosi do pola link?
Problem polega głównie na tym iż mam ograniczony dostęp do serwera, także preferowałbym rozwiązać to jakoś zapytaniem sql, da się to zrobić?


--------------------
Daiquiri: T1 = (dx/dt * s)^hpsi
Daiquiri: gdzie T1 - Twój czas przybycia na miejsce, dx/dt - prędkość, s droga
Daiquiri: brb trzeba by to poprawić T1 - Czas jaki Ci to zajmie
Daiquiri: Zatem T - czas dotarcia p T1 + T2 gdzie T2 = aktualny czas

===
po prostu kocham ją :D haha
Go to the top of the page
+Quote Post
lessi
post
Post #2





Grupa: Zarejestrowani
Postów: 89
Pomógł: 12
Dołączył: 1.12.2009

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


Jeżeli chodzi o przeniesienie to możesz dać

  1. UPDATE tabela SET link = nazwa WHERE nazwa LIKE "http://%"

To polecenie jak widać. Kopiuje zawartość z pola 1 do pola 2. Gdzie ciąg zaczyna się od http://

A jeżeli chcesz wymazać zawartość pola pierwszego to
  1. UPDATE tabela SET nazwa = "" WHERE nazwa LIKE "http://%"


Mogą być błędy. Oczywiście zadziała poprawnie jeżeli nie przekroczysz długości znaków.
Pozostaje tylko problem wycięcia ciągu. Ale postaram się coś jeszcze wykombinować

Ten post edytował lessi 28.06.2011, 10:23:45
Go to the top of the page
+Quote Post
Hpsi
post
Post #3





Grupa: Zarejestrowani
Postów: 483
Pomógł: 50
Dołączył: 15.03.2005
Skąd: Poznań

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


haha.gif dzięki za propozycje ^^ ale nie o to chodzi
ja muszę wyciągnąc pierwszy ciąg znaków który jest linkiem, ten pierwszy ciąg znaków wklepić do link, a w nazwie wyrzucić tylko ten pierwszy ciąg znaków smile.gif

Troszkę bardziej skomplikowane to musi byc smile.gif

wytłumaczę jeszcze raz zęby nie było w palu nazwa mam

czasem:
`nazwa` -> "forum php najlepsze forum php"
`link` -> "http://forum.php.pl"
a czasem
`nazwa` -> "http://forum.php.pl/ forum php najlepsze forum o php"
`link` -> ""

Pierwszy przypadek jest poprawny natomiast z drugiego muszę zrobić coś takiego jak w pierwszym w tym że muszę uwzględnić wszelkie możliwe typy url'i czyli http://host.pl http://host.pl/index/cos/tam.php?a=cos lub http://host.pl/index/zielony.html


--------------------
Daiquiri: T1 = (dx/dt * s)^hpsi
Daiquiri: gdzie T1 - Twój czas przybycia na miejsce, dx/dt - prędkość, s droga
Daiquiri: brb trzeba by to poprawić T1 - Czas jaki Ci to zajmie
Daiquiri: Zatem T - czas dotarcia p T1 + T2 gdzie T2 = aktualny czas

===
po prostu kocham ją :D haha
Go to the top of the page
+Quote Post
Magic WWW
post
Post #4





Grupa: Zarejestrowani
Postów: 123
Pomógł: 32
Dołączył: 9.09.2010
Skąd: Brzeg

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


Mi się wydaje, że za pomocą samego MySQL tego nie zrobisz, potrzebna jest tutaj funkcja podobna do preg_mathc, będziesz musiał zrobić skrypt w PHP, który CI to wszystko ładnie zrobi, innej opcji jak na razie nie widzę smile.gif
Go to the top of the page
+Quote Post
Hpsi
post
Post #5





Grupa: Zarejestrowani
Postów: 483
Pomógł: 50
Dołączył: 15.03.2005
Skąd: Poznań

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


Własnie w php to nie jest problem tongue.gif tylko mówie ze mam ograniczony dostep do serwera, dlatego sie pytam czy idzie to z poziomu sql zrobic smile.gif


--------------------
Daiquiri: T1 = (dx/dt * s)^hpsi
Daiquiri: gdzie T1 - Twój czas przybycia na miejsce, dx/dt - prędkość, s droga
Daiquiri: brb trzeba by to poprawić T1 - Czas jaki Ci to zajmie
Daiquiri: Zatem T - czas dotarcia p T1 + T2 gdzie T2 = aktualny czas

===
po prostu kocham ją :D haha
Go to the top of the page
+Quote Post
lessi
post
Post #6





Grupa: Zarejestrowani
Postów: 89
Pomógł: 12
Dołączył: 1.12.2009

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


Może przydadzą się funkcje REGEXP lub REPLACE

Ten post edytował lessi 28.06.2011, 11:23:05
Go to the top of the page
+Quote Post
Hpsi
post
Post #7





Grupa: Zarejestrowani
Postów: 483
Pomógł: 50
Dołączył: 15.03.2005
Skąd: Poznań

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


w sumie o regexp tez myslalem, dobra lessi - dzieki za pomoc delikatna, jeszcze tematu nie koncze takze wink.gif cierpliwosci jesli chodzi o pomogl smile.gif


--------------------
Daiquiri: T1 = (dx/dt * s)^hpsi
Daiquiri: gdzie T1 - Twój czas przybycia na miejsce, dx/dt - prędkość, s droga
Daiquiri: brb trzeba by to poprawić T1 - Czas jaki Ci to zajmie
Daiquiri: Zatem T - czas dotarcia p T1 + T2 gdzie T2 = aktualny czas

===
po prostu kocham ją :D haha
Go to the top of the page
+Quote Post
lessi
post
Post #8





Grupa: Zarejestrowani
Postów: 89
Pomógł: 12
Dołączył: 1.12.2009

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


Dobra wpadłem na pewien pomysł, bo nie udały mi się kombinacje z wyrażeniami regularnymi.
Jeżeli chodzi o link
Działa tylko jak powiedziałeś jeżeli na początku jest link i potem spacja

  1. UPDATE tabela SET link = SUBSTRING_INDEX(nazwa, ' ', 1)

To wszystko możemy ograniczyć dając

  1. UPDATE tabela SET link = SUBSTRING_INDEX(nazwa, ' ', 1) WHERE nazwa LIKE "http://%"


Mamy w ten sposób załatwiony problem linku.
Pozostała jeszcze sprawa że link nie może być w nazwie.
Tu już potrzeba wyrażeń regularnych. Próbowałem inaczej, jednakże to tylko eliminuje z przodu http://
Zostają jednakże wszelkie ukośniki

  1. UPDATE tabela SET nazwa = REPLACE ( `nazwa` , 'http://', '' ) WHERE nazwa LIKE "http://%"



Ten post edytował lessi 28.06.2011, 12:10:19
Go to the top of the page
+Quote Post
Hpsi
post
Post #9





Grupa: Zarejestrowani
Postów: 483
Pomógł: 50
Dołączył: 15.03.2005
Skąd: Poznań

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


thanks tak nie kombinowałem biggrin.gif


--------------------
Daiquiri: T1 = (dx/dt * s)^hpsi
Daiquiri: gdzie T1 - Twój czas przybycia na miejsce, dx/dt - prędkość, s droga
Daiquiri: brb trzeba by to poprawić T1 - Czas jaki Ci to zajmie
Daiquiri: Zatem T - czas dotarcia p T1 + T2 gdzie T2 = aktualny czas

===
po prostu kocham ją :D haha
Go to the top of the page
+Quote Post
lessi
post
Post #10





Grupa: Zarejestrowani
Postów: 89
Pomógł: 12
Dołączył: 1.12.2009

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


Trochę kombinowania i cierpliwości i coś wyszło. Nie wiem czy da się tak jak w php użyć do tego problemu wyrażeń regularnych. Raczej nie.
Go to the top of the page
+Quote Post

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

 



RSS Aktualny czas: 20.08.2025 - 11:58