Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [mysql] filtracja + edycja bazy.
Forum PHP.pl > Forum > Przedszkole
Hpsi
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ć?
lessi
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ć
Hpsi
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
Magic WWW
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
Hpsi
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
lessi
Może przydadzą się funkcje REGEXP lub REPLACE
Hpsi
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
lessi
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://%"

Hpsi
thanks tak nie kombinowałem biggrin.gif
lessi
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.
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.
Invision Power Board © 2001-2025 Invision Power Services, Inc.