konto usunięte

Temat: [sql] skonwertowana wartość pola = zmienna

Witam,

tworzę url dla podstrony o nazwie np: "kryterium Laplace'a, łąó" w taki sposób: "kryterium-laplacea-lao" . Zajmuje się tym metoda, która odpowiednio konwertuje. Ale nie da się zrobić na odwrót tzn z kryterium-laplacea-lao zrobić kryterium Laplace'a, łąó, ponieważ kilka znaków, których nie chce w url zostaje usunięte.

No i pytanie właściwe:

Zakładając, że konwerter wywoływany jest za pomocą:

Model_Url::convertToUrl($name);


da się napisać zapytanie sql tak, aby znalazło w bazie nazwę, która po skonwertowaniu będzie równa kryterium-laplacea-lao?

czyli:


WHERE name = 'kryterium-laplacea-lao'


da nam rekord w którym name jest równe kryterium Laplace'a, łąó.

Oczywiście można pobrać wszystkie rekordy (tym bardziej, że będzie ich max 30) i po skonwertowaniu wartosci pobranej z bazy sprawdzić czy jest ona równa kryterium-laplacea-lao ale zastanawiam się czy jest jakiś sposób aby pobrac od razu jeden, właściwy rekord.Piotr Burant edytował(a) ten post dnia 26.03.12 o godzinie 02:43
Jan Puczkarski

Jan Puczkarski Webdeveloper i
specjalista SEO

Temat: [sql] skonwertowana wartość pola = zmienna

Raczej się nie da odwrócić procesu tym bardziej że przykładowo więcej niż kilka znaków zastępowane jest znakiem pustym czyli nie ma stosunku 1:1 także procesu nie daje się odwrócić. A tak pytanie mam po co komplikować sobie życie? Równie dobrze można do linku dodać dodatkową zmienną i wybierać po kolumnie indexu. Nieraz się widzi linki w postaci /okna_1.html gdzie 1 jest zmienną pomocniczą do wybierania rekordu z bazy po kolumnie id na przykład, no i druga rzecz z tym związana że jeżeli mamy już id to dobrze ustawić dla Naszej kolumny autoincrement wtedy uzyskamy unikatowy klucz główny i nawet dwa rekordy mogą mieć taką samą nazwę i te samo słowo kluczowe w linku a wybierze z bazy i tak właściwy rekord.Jan Puczkarski edytował(a) ten post dnia 26.03.12 o godzinie 06:53
Paweł Urban

Paweł Urban Programista
aplikacji mobilnych
(Google Android)
oraz int...

Temat: [sql] skonwertowana wartość pola = zmienna

Proponuję takie rozwiązanie jak kolega. Dodanie unikalnego identyfikatora. Poza tym, przy bardzo dużych ilościach artykułów wyszukiwanie ciągów znaków będzie bardziej obciążające niż liczb. Ewentualnie jeśli chcesz koniecznie mieć jedynie ciąg znaków to w bazie danych poza nazwą podstrony, umieść dedykowaną kolumnę na rozpoznawalny URL.

Jeśli koniecznie chcesz dopasowywać ciągi znaków to staraj się nie robić na nich dodatkowych operacji ani nie porównywać fragmentów ciągów (mysql ignoruje indeksy w takiej sytuacji)
Marek Wywiał

Marek Wywiał Programista,
administrator,
instruktor

Temat: [sql] skonwertowana wartość pola = zmienna

Proponuje skonwertowany ciąg znaków (slug), tworzyć podczas tworzenia elementu w bazie (np artykułu).

Czyli do tabeli dodać pole 'slug' (uniq), i w chwili tworzenia wpisu tworzyć także slug.
Będziesz wtedy mógł go po prostu użyć podczas tworzenia url'a, a zarazem znaleźć element w bazie.

W formatce edycyjnej pole slug można tworzyć automatycznie jeżeli użytkownik go nie podał ( z tytułu), a zarazem można pozwolić na ręczne jego podanie. Można wtedy podać krótszy slug niż tytuł (np tytuł z 200ma znakami) lub bardziej ludzki by ciąg znaków nie wyglądał jak szyfr :)
Jan Puczkarski

Jan Puczkarski Webdeveloper i
specjalista SEO

Temat: [sql] skonwertowana wartość pola = zmienna

No kolega Marek też dał dobry pomysł, jednak w tym wariancie proszę mi podać wg której kolumny odbywałoby się sortowanie od najświeższych artykułów bo wg slug'ów to nie bardzo to widzę. Tak czy owak kolumna id musi być jeżeli planujemy wykorzystać sortowanie chornologiczne.
Michał Ławicki

Michał Ławicki dostawca zadowolenia

Temat: [sql] skonwertowana wartość pola = zmienna

Posiadanie "ID" jest wskazane z powodów optymalizacyjnych, w końcu nie ma sensu wszędzie odwoływać się do rekordów po stosunkowo długim stringu, a także wykorzystywać go jako klucz obcy.

Co do sortowania to pytanie czy lepiej wykorzystać id, czy kolumnę określającą datę utworzenia rekordu.
Jan Puczkarski

Jan Puczkarski Webdeveloper i
specjalista SEO

Temat: [sql] skonwertowana wartość pola = zmienna

Michał Ławicki:
Co do sortowania to pytanie czy lepiej wykorzystać id, czy kolumnę określającą datę utworzenia rekordu.

Na to pytanie odpowie jedynie cel do którego zastosujemy sortowanie, jeżeli chcemy wygenerować raport chronologicznie tylko z danego miesiąca tak jak to można robić na kontach bankowych lub jeżeli musimy wyświetlać datę publikacji danych to zdecydowanie kolumna z datą dobrze do tego się nada. Ale jeżeli mamy 100 rekordów a nie interesuje Nas data ani jej wyświetlenie tylko kolejność dodania wtedy świetnie się sprawdzi kolumna id z autoinkramentacją.
Michał Ławicki

Michał Ławicki dostawca zadowolenia

Temat: [sql] skonwertowana wartość pola = zmienna

Dokładnie, dlatego zostawiłem tą kwestię otwartą, ponieważ tak jak wspomniałeś sposób sortowania zależy od tego co chcemy osiągnąć.
Wojciech K.

Wojciech K. realizator pomysłów
własnych

Temat: [sql] skonwertowana wartość pola = zmienna

nie lepiej trzymać w bazie obu stringów? zarówno tego zakodowanego do postaci URL, jak i oryginalnego? przecież to świętokradztwo, kodować/rozkodowywać stringi podczas zapytania, gdzie jest do przebrnięcia dziesiątki/setki rekordów.
Wojciech K.

Wojciech K. realizator pomysłów
własnych

Temat: [sql] skonwertowana wartość pola = zmienna

Michał Ławicki:
Co do sortowania to pytanie czy lepiej wykorzystać id, czy kolumnę określającą datę utworzenia rekordu.

biorąc po uwagę, że id w 99% przypadków rośnie równolegle w stosunku do daty utworzenia, oba sposoby dadzą ten sam wynik (sortowanie po ID będzie zapewne trochę szybsze).
Michał Ławicki

Michał Ławicki dostawca zadowolenia

Temat: [sql] skonwertowana wartość pola = zmienna

Wojciech K.:
nie lepiej trzymać w bazie obu stringów? zarówno tego zakodowanego do postaci URL, jak i oryginalnego? przecież to świętokradztwo, kodować/rozkodowywać stringi podczas zapytania, gdzie jest do przebrnięcia dziesiątki/setki rekordów.
Zdecydowanie, szczególnie że z zasady slug generowany jest z tytułu / nazwy rekordu.
Wojciech K.:
Michał Ławicki:
Co do sortowania to pytanie czy lepiej wykorzystać id, czy kolumnę określającą datę utworzenia rekordu.

biorąc po uwagę, że id w 99% przypadków rośnie równolegle w stosunku do daty utworzenia, oba sposoby dadzą ten sam wynik (sortowanie po ID będzie zapewne trochę szybsze).
Zależy od zastosowania. W wielu przypadkach data może być modyfikowana, co już wprowadza rozdzielność daty z id. Do tego możemy sortować po różnych datach, nie tylko utworzenia, ale i np. modyfikacji. Generalnie wszystko zależy od potrzeby, więc raczej nie ma co teoretyzować w tym przypadku bez konkretnego przykładu.

konto usunięte

Temat: [sql] skonwertowana wartość pola = zmienna

zapisuję w bazie id, datę dodania i ostatniej modyfikacji więc nie ma problemu z sortowaniem. No i zrobię tak jak mówicie, dodam nowe pole w bazie.

Dzięki za zainteresowanie i pomoc!

konto usunięte

Temat: [sql] skonwertowana wartość pola = zmienna

Od końca.
Id != data. Tak jak pisze Michał Ławicki - data to data, id to id - i jedno z drugim nie musi mieć wiele wspólnego.

Odnośnie slugów. Najlepiej pozwolić użytkownikowi samemu definiować sluga, jeśli go nie poda - tworzyć z automatu na podstawie tytułu.

Samo szukanie slugów w tabelach z elementami jest wg mnie błędem.
Przy jednym typie elementów - nie jest to problem.
Przy większej różnorodności do przeszukania będzie odpowiednio więcej tabel.

Lepszym rozwiązaniem będzie użycie tablicy routingu, gdzie przechowuje się gotowe wzorce ze schematami odczytu parametrów lub pełne linki z konkretnymi parametrami.

Już pomijam fakt, że takie rozwiązanie pozwala oddzielić routing od reszty programu.
Marek Wywiał

Marek Wywiał Programista,
administrator,
instruktor

Temat: [sql] skonwertowana wartość pola = zmienna

Jan Puczkarski:
No kolega Marek też dał dobry pomysł, jednak w tym wariancie proszę mi podać wg której kolumny odbywałoby się sortowanie od najświeższych artykułów bo wg slug'ów to nie bardzo to widzę. Tak czy owak kolumna id musi być jeżeli planujemy wykorzystać sortowanie chornologiczne.

w wątku już pojawiły się odpowiedzi.
Jeżeli potrzebujemy sortować w/g daty, np. dodania lub częściej publikacji - która jest całkiem różna od daty dodania rekordu, wtedy sortujemy właśnie w/g dedykowanego temu celowi pola.

Sortowanie w/g id lub w/g slug'a może być potrzebne gdy potrzebujemy posortować slugi alfabetycznie lub id w bazie kolejno, ale nie ma to związku z sortowanie w/g odpowiedniej daty.

Edit: "Tak czy owak kolumna id musi być jeżeli planujemy wykorzystać sortowanie chornologiczne."

id służy tylko i wyłącznie jednoznacznemu identyfikowaniu elementu w bazie.

'ID' może być pojedynczym polem liczbowym z autoincrementem, ale równie dobrze może to być 'slug'
jeżeli jest niepowtarzalny dla wszystkich rekordów (czasem można dopuszczać powtarzanie slug'a w powiązaniu np z kategorią, itp. Zależy to od architektury jaką sobie założyliśmy na potrzeby naszego projektu).

więc ID w jakiejś postaci jest wymagane, ale nie możemy opierać na nim sortowania w/g innych kryteriów (chyba, że naszym id (primary key) jest data utworzenia i system pilnuje by na pewno dodać elementy w różnym czasie, np kolejkując równoczesne zapisy) - się rozpisałem ;)Marek Wywiał edytował(a) ten post dnia 26.03.12 o godzinie 12:58
Jan Puczkarski

Jan Puczkarski Webdeveloper i
specjalista SEO

Temat: [sql] skonwertowana wartość pola = zmienna

Oczywiście tak. Nie doprecyzowałem że o datę utworzenia rekordu chodzi, jak słusznie Michał zauważył przy rozbiciu na datę modyfikacji, datę publikacji i inne oczywiście otrzymujemy rozbieżność z kolumną id. W każdym razie jestem zadowolony, że udzieliliśmy autorowi tematu wskazówek i przeprowadziliśmy małą dyskusję. Pozdrawiam rozmówców i miłego odpoczynku po pracy życzę ;)
Wojciech K.

Wojciech K. realizator pomysłów
własnych

Temat: [sql] skonwertowana wartość pola = zmienna

Michał Ławicki:
Michał Ławicki:
Co do sortowania to pytanie czy lepiej wykorzystać id, czy kolumnę określającą datę utworzenia rekordu.
biorąc po uwagę, że id w 99% przypadków rośnie równolegle w stosunku do daty utworzenia, oba sposoby dadzą ten sam wynik (sortowanie po ID będzie zapewne trochę szybsze).
Zależy od zastosowania. W wielu przypadkach data może być modyfikowana, co już wprowadza rozdzielność daty z id. Do tego możemy sortować po różnych datach, nie tylko utworzenia, ale i np. modyfikacji.

wspomniana była "data utworzenia rekordu" (która rośnie tak samo, jak ID), a nie data modyfikacji, czy urodzin autora ;)
skoro ID jest primary key, to grzech z niego nie skorzystać - zamiast tworzyć dodatkowe indeksy (a więc powiększać plik indeksów), lub sortować bez indeksu.

konto usunięte

Temat: [sql] skonwertowana wartość pola = zmienna

Pod warunkiem, że dane nie są importowane z zewnętrznych źródeł. Jeżeli są - daty utworzenia będą inne niż ID'eki.

Ta, wiem, szukam na siłę - ale zdarzyło mi się i teraz wolę dodać jedno pole niż potem czarować.

Następna dyskusja:

[JavaScript] Wyczyszczenie ...




Wyślij zaproszenie do