Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Ładne linki + zapytania do bazy
Forum PHP.pl > Forum > PHP
Gigante
Witam

Problem wyglada tak:
Strona ma miec ladne linki np: strona.pl/ladny-link (osiagam to przy pomocy .htaccess-a)
Po wejsciu na nia trzeba zadac pytanie do bazy aby pobrac dane odpowiadajace takiemu adresowi
Czy zapisaywac w bazie "ladny-link" i poprzez select wczytywac dane odpowiadajace takiemu ciagowi czy moze macie inne pomysly tak by nie obciazac bazy zbednymi danymi?
A moze da sie to ominac nie zapisujac dancych do bazy i uzywajac tylko ID
Dodam ze adres jest generowany wedle tytulu dla danej podstrony i pole tytul w bazie jest zapisany jako: Ładny link

Obecnie uzywam zapytania w stylu:
  1. $pytanie = "SELECT id,tytul FROM tabela";
  2. $wynik = mysql_query($pytanie);
  3.  
  4. // przeksztalc je wedle 'wzoru' i porownaj czy adres nie jest rowny z któryms z przekszalcnych wpisow
  5. while($wiersz = mysql_fetch_array($wynik))
  6. {
  7. if (URLuj($wiersz['tytul']) == $_GET['gra'])
  8. $id = $wiersz['id'];
  9. }

w ten sposob wyciagam ID dnago wpisu i wedle nigo pobieram dane do wysiwtlana na stronie

funkcja URLuj() przetwarza tak tytul aby byl "przetrwaialny" w pasku adresu.
erix
Cytat
Czy zapisaywac w bazie "ladny-link" i poprzez select wczytywac dane odpowiadajace takiemu ciagowi czy moze macie inne pomysly tak by nie obciazac bazy zbednymi danymi?

A co w tym złego? Szukasz konkretnego ciągu znaków zamiast niepotrzebnie marnować moc procesora.
Gigante
ale to zajmuje miejsce w bazie... lepiej jest miec kilka kilo wiecej w bazie niz meczyc procka?
erix
Cytat
lepiej jest miec kilka kilo wiecej w bazie niz meczyc procka?

Co to jest kilka kilo...

Jak trochę więcej się w bazie rozepchniesz, to nie będzie to tak wpływać, jak np. efekt digga/wykopu na procka.

Poza tym, wiele systemów portalowych coś takiego implementuje (Wordpress na pewno, ogólnie - Google: post slug). Lepiej pomęczyć CPU tylko przy tworzeniu/modyfikacji niż przy odczytach, których jest setki, o ile nie tysiące razy więcej.
sn1p3r
Możesz robić tak, jak robią inni - czyli miksusa, w urlu masz łady tekst oraz "jakby" ukryte ID

http://sport.gadu-gadu.pl/5586918835261068...-podziekuj-i-ty
zobacz, że

http://sport.gadu-gadu.pl/5586918835261068749/

też działa

W ten sposób interesuje Cię tylko to id "ukryte" w linku, treść nie jest ważna.

Jeśli site będzie "mało" odwiedzany, to rób jak Ci wygodniej, łatwiej.
Jeśli będziesz miał duży ruch, to pamiętaj, że wybranie danych z bazy "po id" będzie działać szybciej niż "po nazwie" - kwestie indeksów na polach typu int oraz text.

Oczywiście nie możesz mieć dwóch takich samych tytułów, gdy będziesz "szukał" po nazwie (nie po id) smile.gif
Gigante
Site juz dziala od ponad 2 lat na zasadzie jaka opisalem powyzej

Jej ogladalnosc na dobe siega 4-5k z czego kazdy srednio przeglada 6 podstron

ID w adresie nie bedzie juz takim ladnym adresem jak bez ID smile.gif dlatego pozostane prawdopodobnie przy opcji zapisu ID + tytul + adres + [reszta]

Chyba ze ktos ma jeszcze inny pomysl podejscia do tej kwestii ?
erix
Cytat
też działa

W ten sposób interesuje Cię tylko to id "ukryte" w linku, treść nie jest ważna.

Jeśli site będzie "mało" odwiedzany, to rób jak Ci wygodniej, łatwiej.

I to jest bardzo złe podejście, bo wystarczy, że ktoś linka pomyli i masz duplicate content.
nospor
Cytat
I to jest bardzo złe podejście, bo wystarczy, że ktoś linka pomyli i masz duplicate content.
Eeee tam...
wystarczy, że ustawisz właściwy canonical i/lub przekierujesz na właściwy adres.
erix
No tak, ale i tak musisz sprawdzić, czy to jest właściwy slug. wink.gif
nospor
No tak. A jaki to problem sprawdzić? A poza tym tak czytam ten temat i czytam i naprawdę nie wiem o co Wy tu się "kłócicie" wink.gif
erix
O cenne kilobajty. biggrin.gif
nospor
Aaa.... kilobajty...no tak, wszystko jasne smile.gif popieram, jestem za a nawet przeciw wink.gif

@Gigante
Ten kod :
  1. while($wiersz = mysql_fetch_array($wynik))
  2. {
  3. if (URLuj($wiersz['tytul']) == $_GET['gra'])
  4. $id = $wiersz['id'];
  5. }

to jakieś nieporozumienie. Pobierasz z bazy wszystko tylko po to by znaleźć jeden rekord. Tak się nie robi. To jest szczyt nieoptymalnosci... no dobra, nie szczyt, są gorsze skrypty... Nie mniej jednak to jest złe, be, nunu,paskudztwo.. smile.gif
Gigante
To "paskudztwo" lada chwila zostanie zlikwidowane wink.gif Wybralem opcje bez ID w adresie (a to ze nie moga sie powtarzac to wiem, jetem tego w pelni swiadomy i taki tez jest zamysl strony by title byly unikalne).


Mam jeszcze jedno pytanie:
Czytalem gdzies/kiedys ze opcja 1 dziala szybciej:
  1. SELECT user FROM uzytkownik WHERE id=123456789

  1. SELECT user FROM uzytkownik WHERE id='123456789'

Mit czy prawda? Oczywiscie mowa o przekazywaniu wartosci liczbowych typu INT
nospor
Jeśli coś jest liczbą to ma to być liczba a nie tekst. Niezależnie od tego czy działa szybciej czy nie wink.gif Uczmy się pisać poprawnie.
kiler129
Ciekawy temat ale mam jedno pytanie - jeśli dajemy tekst bez id, np. http://domain.tld/nowe-programy i zakładamy, że to artykuł to co zrobić w wypadku zmiany nazwy? Nie zmieniać sluga czy też sprawić, że wszystkie linki przestaną działać?
Wydaje mi się, że mniejszym złem są linki http://domain.tld/a42-nowe-programy. Wtedy można sprawdzić id oraz slug, jeśli id znalazł ale slug inny to robi pernament redirect (302 jak dobrze pamietam?) i wtedy mamy wilka sytego i owcę całą - nie ma duplikatu dla google oraz linki są zawsze ważne.
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.