Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [MySQL][PHP]przyjazne linki w mysql?
qoqo
post
Post #1





Grupa: Zarejestrowani
Postów: 53
Pomógł: 0
Dołączył: 5.06.2014

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


Witam.

Chcę zrobić bazę artykułów z newsami

Wygląd bazy danych jest taki:

ID TYTUŁ NEWSA URL TRESC DATA


Załóżmy tytuł nosi nazwe z polskimi znakami "przykładowy tytuł"

I w bazie wygląda to tak:

ID TYTUŁ NEWSA URL TRESC DATA
1 PRZYKŁADOWY TYTUŁ TREŚĆ ITD 4.04.2020


jak zrobić, aby tytuł newsa wrzucił w tabele URL o takim wyglądzie: przykladowy-tytul

i wtedy zamiast wyświetlania przez ID wyświetlałbym tytuł za pomocą %LIKE% przykladowy-tytul czyli na zasadzie URl wyświetlałby mi się post


w jaki sposób to zrobić?

Go to the top of the page
+Quote Post
2 Stron V   1 2 >  
Start new topic
Odpowiedzi (1 - 38)
Pyton_000
post
Post #2





Grupa: Zarejestrowani
Postów: 8 068
Pomógł: 1414
Dołączył: 26.10.2005

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


To sie nazywa Slug
Możesz zrobić tym np: http://stackoverflow.com/a/2955878
Wrzucasz do BD.

Przy wejściu sprawdzasz string, szukasz w BD i pobierasz odpowiedni content.
Go to the top of the page
+Quote Post
qoqo
post
Post #3





Grupa: Zarejestrowani
Postów: 53
Pomógł: 0
Dołączył: 5.06.2014

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


super, dzięki o to mi chodziło (IMG:style_emoticons/default/smile.gif)

Jeszcze mam jeden problem.

chodzi o tagi...

Dodaje poprawnie tagi przykład: ola śćź, karolina ęąć.

Przy dodawaniu do tablicy 'tagi' dodaje te same tagi do tablicy 'tagi_url' gdzie zamienia je na taką postać: ola-scz, karolina-eac, itd itp

W jaki sposób wyświetlić te tagi a później w jaki sposób zrobić, jak ktoś kliknie na link np. tag-ola-scz.html wyszuka za pomocą %LIKE% wpisy o zawartości ola-scz ?



baza wygląda tak:


(IMG:http://oi57.tinypic.com/m8193o.jpg)

Ten post edytował qoqo 5.03.2015, 13:43:29
Go to the top of the page
+Quote Post
fklar
post
Post #4





Grupa: Zarejestrowani
Postów: 61
Pomógł: 13
Dołączył: 17.12.2011

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


Kod
SELECT * FROM `wpisy` WHERE `tagi_url` LIKE '%ola-scz%'


Natomiast ja bym to zrobił inaczej. Nie lepiej stworzyć osobno tabelę z tagami i powiązanie tag-wpis, gdzie po prostu w osobnej tabeli trzymałbyś id wpisu i id powiązanych z nim tagów?
Go to the top of the page
+Quote Post
qoqo
post
Post #5





Grupa: Zarejestrowani
Postów: 53
Pomógł: 0
Dołączył: 5.06.2014

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


w jaki sposób to zrobić?
Go to the top of the page
+Quote Post
fklar
post
Post #6





Grupa: Zarejestrowani
Postów: 61
Pomógł: 13
Dołączył: 17.12.2011

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


Uproszczona struktura:

Wpisy
id | tytuł | slug | treść | data

Tagi
id | nazwa | slug

Tagi wpisów
id | id wpisu | id tagu

Wtedy jak masz np. wpis "Testowy" o id 1 i tagi A (id 8) i B (id 20) to w tabeli z tą relacją będziesz miał:

id | id wpisu | id tagu
1 | 1 | 8
1 | 1 | 20

Będziesz miał większą przejrzystość w bazie. Wtedy mając id tagu pobierzesz sobie id wszystkich wpisów z tym tagiem i je sobie wyświetlisz.
Go to the top of the page
+Quote Post
qoqo
post
Post #7





Grupa: Zarejestrowani
Postów: 53
Pomógł: 0
Dołączył: 5.06.2014

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


a jak zrobić aby we wpisie tagi się wyświetlały?
załóżmy otaguję post: tag-1, tag-2, tag-3

to chcę aby przy wejściu w ten wpis wyświetlały się te tagi i adres url do tych tagów (to nie problem)

ale jak tu zrobić?

ja nie pobieram treści wpisu poprzez ID tylko poprzez URL wpisu %LIKE%

(widać w bazie)

Ten post edytował qoqo 5.03.2015, 16:46:05
Go to the top of the page
+Quote Post
fklar
post
Post #8





Grupa: Zarejestrowani
Postów: 61
Pomógł: 13
Dołączył: 17.12.2011

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


1. Tak samo znajdziesz sobie po id wpisu wszystkie tagi.
2. Nic nie szkodzi, żeby znaleźć id tagu znając slug obecny w adresie.

Wiem, że to może skomplikowanie wygląda, ale tak właśnie się robi.
Go to the top of the page
+Quote Post
qoqo
post
Post #9





Grupa: Zarejestrowani
Postów: 53
Pomógł: 0
Dołączył: 5.06.2014

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


ok rozumie, mam nadzieje, że dam radę.
jedyne pytanie: jak zrobić na zasadzie ID wpisu, skoro dodają się równocześnie wpis i tagi jeszcze nie jest znany ID wpisu, wygenerować jakiś unikalny klucz bez powtórzeń?

Ten post edytował qoqo 5.03.2015, 21:16:12
Go to the top of the page
+Quote Post
fklar
post
Post #10





Grupa: Zarejestrowani
Postów: 61
Pomógł: 13
Dołączył: 17.12.2011

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


ID masz w bazie danych jako główny klucz, który jest przyporządkowywany automatycznie do rekordu. Funkcja mysqli_insert_id zwróci Ci ostatnio dodane ID w tabeli.
Go to the top of the page
+Quote Post
qoqo
post
Post #11





Grupa: Zarejestrowani
Postów: 53
Pomógł: 0
Dołączył: 5.06.2014

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


Wpisy
id | tytuł | slug | treść | data

Tagi
id | nazwa | slug

Tagi wpisów
id | id wpisu | id tagu


Więc chodzi mi o to: Dodaję wpis do wpisy, po dodaniu tworzy ID unikalny np. 100, 120 itd - rozumiem, jednak przy jednym zapytaniu gdzie leci treść do wpisów, jak zrobić aby w tabeli tagi wpisów pojawiły się ID wpisu i ID tagów?

troche jestem ciemny w tym (IMG:style_emoticons/default/biggrin.gif) albo mózg od myślenia przegrzany
Go to the top of the page
+Quote Post
Pyton_000
post
Post #12





Grupa: Zarejestrowani
Postów: 8 068
Pomógł: 1414
Dołączył: 26.10.2005

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


Normalnie, dodajesz tagi - również masz ich ID, zbierasz to do kupy i wrzucasz do "tagi wpisów"
Go to the top of the page
+Quote Post
qoqo
post
Post #13





Grupa: Zarejestrowani
Postów: 53
Pomógł: 0
Dołączył: 5.06.2014

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


Mam:

  1.  
  2. ///// Dodajemy treść do bazy wpisy_$tabela w tym przypadku jest to wpisy_test
  3. $zapytanie = "INSERT INTO wpisy_$tabela SET tytul='$tytulWpisu', url='$clean', tresc='$trescWpisu', trescwpis='$trescWpisu2', obrazek='$obrazekWpisu', description='$description', keywords='$keywords'";
  4. mysql_query($zapytanie);
  5. $wpis_id = mysql_insert_id();
  6. if($zapytanie) echo "<font color='green'>Wygenerowano wpis: <b>".$tytulWpisu." </b></font>";
  7. else echo "Błąd nie udało się dodać nowego rekordu";
  8.  
  9. ////
  10. $tagi_all= explode(',', strtolower($tagiWpisu));
  11. for ($x = 0; $x < count($tagi_all); $x++) {
  12. //dodajemy tagi tagi_test
  13. $zapytanie_tagi = "INSERT INTO `tagi_test` (`id`, `nazwa`) VALUES ('', '" . $tagi_all[$x] . "')";
  14. $maket = mysql_query($zapytanie_tagi);
  15.  
  16. //pobieram id tagu
  17. $tag_id = mysql_insert_id();
  18.  
  19. // tutaj dodajemy ID tagu i id wpisu
  20. $zapytanie_id = "INSERT INTO `tagi_wpisow_test` (`id`, `id_tagu`, `id_wpisu`) VALUES ('', '$tag_id', '$wpis_id')";
  21. $maketm = mysql_query($zapytanie_id);
  22. }


Zrobiłem jeszcze tagi bez slug'a - wrzuca je to bazy poprawnie.

Problem pojawia się w ostatniej tabeli tagi_wpisow_test

gdzie mam: ID, ID_wpisu i id_tagu

dodaje ttylko jeden rekord :1, IDWPISU: 140, ID TAGU: 10

czyli pierwszy wygenerowany tag mi jedynie dodaje, reszty nie... jak zrobić, aby wrzuciło:

ID, ID WPISU, ID TAGU:
1, 100, ID1
2, 100, ID2
3, 100, ID3

Nie wiem czy dobrze kombinuję? co jest źle?

Ten post edytował qoqo 6.03.2015, 13:17:49
Go to the top of the page
+Quote Post
Pyton_000
post
Post #14





Grupa: Zarejestrowani
Postów: 8 068
Pomógł: 1414
Dołączył: 26.10.2005

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


- Nie potrzebujesz id w tagi_wpisow_test
- załóż indeks PK na (id_tagu, id_wpisu)

  1. ///// Dodajemy treść do bazy wpisy_$tabela w tym przypadku jest to wpisy_test
  2. $zapytanie = "INSERT INTO wpisy_$tabela
  3. SET
  4. tytul='$tytulWpisu',
  5. url='$clean',
  6. tresc='$trescWpisu',
  7. trescwpis='$trescWpisu2',
  8. obrazek='$obrazekWpisu',
  9. description='$description',
  10. keywords='$keywords'";
  11. mysql_query($zapytanie);
  12. $wpis_id = mysql_insert_id();
  13.  
  14. if($zapytanie)
  15. {
  16. echo '<span style="color: green; ">Wygenerowano wpis: <b>' .$tytulWpisu. ' </b></span>';
  17. }
  18. else
  19. {
  20. echo "Błąd nie udało się dodać nowego rekordu";
  21. }
  22.  
  23. $tagi_all= explode(',', strtolower($tagiWpisu));
  24.  
  25. foreach ($tagi_alla as $tag)
  26. {
  27. // Sprawdzamy czy jest taki tag, Nie ma sensu dodawać x takich samych
  28. $sql = "SELECT id FROM tagi_test WHERE nazwa = '$tag'";
  29.  
  30. if(!$id)
  31. {
  32. $sql = "INSERT INTO tagi_test (nazwa) VALUES ('$tag')";
  33. mysql_query($sql);
  34. $id = mysql_insert_id();
  35. }
  36. else {
  37. $id = $id[0];
  38. }
  39.  
  40. $sql = "INSERT INTO `tagi_wpisow_test` (`id_tagu`, `id_wpisu`) VALUES ('$id', '$wpis_id')";
  41. mysql_query($sql);
  42. }
Go to the top of the page
+Quote Post
qoqo
post
Post #15





Grupa: Zarejestrowani
Postów: 53
Pomógł: 0
Dołączył: 5.06.2014

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


wyskakuje Fatal error: Cannot use object of type stdClass as array in 125

a ta linia to:

  1. $id = $id[0];


Ten post edytował qoqo 6.03.2015, 13:44:11
Go to the top of the page
+Quote Post
Pyton_000
post
Post #16





Grupa: Zarejestrowani
Postów: 8 068
Pomógł: 1414
Dołączył: 26.10.2005

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


zamień fetch_field na fetch_row
Go to the top of the page
+Quote Post
qoqo
post
Post #17





Grupa: Zarejestrowani
Postów: 53
Pomógł: 0
Dołączył: 5.06.2014

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


super dziękuję. Mam jeszcze jedno pytanie odnośnie slug'a tagów:

dodaję również
  1. $tagi_slug = explode(',', strtolower($cleantagi));


i równiez jadę tak jak z zwykłym tagiem, czy łącze w jedno?
Go to the top of the page
+Quote Post
Pyton_000
post
Post #18





Grupa: Zarejestrowani
Postów: 8 068
Pomógł: 1414
Dołączył: 26.10.2005

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


slug dodajesz do 'tagi_test' razem z normalnym tagiem.
Go to the top of the page
+Quote Post
qoqo
post
Post #19





Grupa: Zarejestrowani
Postów: 53
Pomógł: 0
Dołączył: 5.06.2014

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


ok jeszcze jedno: w jaki sposób pobrać to we wpisie?

Chodzi mi o to, że mam pobrane wszystkie pola wpisu : między innymi ID

i teraz wyszukuję z tabeli tagi wpisów za pomocą LIKE ID z artykułu, przypisuje pobrany IDtagu i na tej podstawie wyświetlam z tabeli tagi_test we wpisach?

Ten post edytował qoqo 6.03.2015, 15:58:48
Go to the top of the page
+Quote Post
Pyton_000
post
Post #20





Grupa: Zarejestrowani
Postów: 8 068
Pomógł: 1414
Dołączył: 26.10.2005

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


Jak masz ID wpisu to

  1. SELECT name FROM tagi_wpisow_test tw JOIN tagi_test t ON(t.id = tw.tag_id) WHERE tw.wpis_id = 3

W ten deseń
Go to the top of the page
+Quote Post
qoqo
post
Post #21





Grupa: Zarejestrowani
Postów: 53
Pomógł: 0
Dołączył: 5.06.2014

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


co oznacza to "tw." w zapytaniu?
Go to the top of the page
+Quote Post
Pyton_000
post
Post #22





Grupa: Zarejestrowani
Postów: 8 068
Pomógł: 1414
Dołączył: 26.10.2005

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


alias tabeli
Go to the top of the page
+Quote Post
qoqo
post
Post #23





Grupa: Zarejestrowani
Postów: 53
Pomógł: 0
Dołączył: 5.06.2014

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


Zoribłem tak:

  1. $tagi_wpis = mysql_query("SELECT nazwa, slug FROM tagi_test JOIN tagi_wpisow_test ON(id_tagu) WHERE id_wpisu ='$id%'");
  2.  
  3. if (!$tagi_wpis) {
  4. echo 'Nie można uruchomić zapytania: ' . mysql_error();
  5. }
  6.  
  7. while ($tagiwiersz = mysql_fetch_array($tagi_wpis))
  8. {
  9.  
  10. $idpobierz = $tagiwiersz['nazwa'];
  11. $slugg = $tagiwiersz['slug'];
  12.  
  13. }


jednak przy wyświetlaniu pobiera tylko jeden tag, co źle robie?
Go to the top of the page
+Quote Post
Pyton_000
post
Post #24





Grupa: Zarejestrowani
Postów: 8 068
Pomógł: 1414
Dołączył: 26.10.2005

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


Nie uważasz że Twoje zapytanie jest "troszkę" inne od mojego?
Go to the top of the page
+Quote Post
qoqo
post
Post #25





Grupa: Zarejestrowani
Postów: 53
Pomógł: 0
Dołączył: 5.06.2014

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


nie troszkę tylko jest, kombinuje na różne sposoby - tam mi wyskakiwało, że tw nie jest tabelą czy coś takiego :/
Go to the top of the page
+Quote Post
Pyton_000
post
Post #26





Grupa: Zarejestrowani
Postów: 8 068
Pomógł: 1414
Dołączył: 26.10.2005

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


Pokaż lepiej jaki błąd miałeś z mojego zapytania bo to co pokazałeś się kupy nie trzyma.
Go to the top of the page
+Quote Post
qoqo
post
Post #27





Grupa: Zarejestrowani
Postów: 53
Pomógł: 0
Dołączył: 5.06.2014

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


Nie można uruchomić zapytania: Nieznana kolumna 'tw.wpis_id' w where clause
Go to the top of the page
+Quote Post
Pyton_000
post
Post #28





Grupa: Zarejestrowani
Postów: 8 068
Pomógł: 1414
Dołączył: 26.10.2005

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


to zmieć na: t.id
lub pokaż strukturę tabel
Go to the top of the page
+Quote Post
qoqo
post
Post #29





Grupa: Zarejestrowani
Postów: 53
Pomógł: 0
Dołączył: 5.06.2014

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


tak wygląda w bazie wszystko:

(IMG:http://zapodaj.net/images/bd251b54e9c6b.jpg)


po zmianie jest błąd:
Nie można uruchomić zapytania: Something is wrong in your syntax obok '.id JOIN tagi_test t ON(t.id = tw.tag_id) WHERE tw.wpis_id=223' w linii 1

Ten post edytował qoqo 6.03.2015, 18:54:35
Go to the top of the page
+Quote Post
Pyton_000
post
Post #30





Grupa: Zarejestrowani
Postów: 8 068
Pomógł: 1414
Dołączył: 26.10.2005

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


nie tu, w WHERE zmień

Ten post edytował Pyton_000 6.03.2015, 18:57:05
Go to the top of the page
+Quote Post
qoqo
post
Post #31





Grupa: Zarejestrowani
Postów: 53
Pomógł: 0
Dołączył: 5.06.2014

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


  1. SELECT nazwa FROM tagi_wpisow_test tw JOIN tagi_test t ON(t.id = tw.tag_id) WHERE t.id = $id


tak?

wywala: Nie można uruchomić zapytania: Nieznana kolumna 'tw.tag_id' w on clause
Go to the top of the page
+Quote Post
Pyton_000
post
Post #32





Grupa: Zarejestrowani
Postów: 8 068
Pomógł: 1414
Dołączył: 26.10.2005

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


Pokażesz w końcu struktury tabel ? Poza tym czytaj co do Ciebie piszą. Skoro nie ma takiej kolumny to zamień łaskawie na to co masz.

Ten post edytował Pyton_000 6.03.2015, 19:27:34
Go to the top of the page
+Quote Post
qoqo
post
Post #33





Grupa: Zarejestrowani
Postów: 53
Pomógł: 0
Dołączył: 5.06.2014

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


Tables_in_biznes2_gen
tagi_test
tagi_wpisow_test
wpisy_test


tagi_test:

  1. FIELD Type NULL KEY DEFAULT Extra
  2. id int(11) NO PRI NULL AUTO_INCREMENT
  3. nazwa tinytext NO UNI NULL
  4. slug tinytext YES UNI NULL



tagi_wpisow_test:

  1. FIELD Type NULL KEY DEFAULT Extra
  2. id_tagu int(11) YES NULL
  3. id_wpisu int(11) YES NULL
  4.  


faktycznie - przepraszam, zamotałem się, poprawiłem - zwraca zero wierszy
Go to the top of the page
+Quote Post
Pyton_000
post
Post #34





Grupa: Zarejestrowani
Postów: 8 068
Pomógł: 1414
Dołączył: 26.10.2005

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


Czyli jak, pokaż to zapytanie co poprawiłeś.
Go to the top of the page
+Quote Post
qoqo
post
Post #35





Grupa: Zarejestrowani
Postów: 53
Pomógł: 0
Dołączył: 5.06.2014

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


  1. SELECT nazwa FROM tagi_wpisow_test tw JOIN tagi_test t ON(t.id = tw.id_tagu) WHERE t.id = 228


Wyświetla z ID tagu nie artykułu i zwraca tylko jeden wynik - będę kombinował dalej
Go to the top of the page
+Quote Post
Pyton_000
post
Post #36





Grupa: Zarejestrowani
Postów: 8 068
Pomógł: 1414
Dołączył: 26.10.2005

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


Ja już zgłupiałem. To Co Ty chcesz osiągnąć w końcu?
Go to the top of the page
+Quote Post
qoqo
post
Post #37





Grupa: Zarejestrowani
Postów: 53
Pomógł: 0
Dołączył: 5.06.2014

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


zrobiłem to w ten sposób:
  1. SELECT nazwa,slug FROM domena_tagi JOIN domena_tagi_wpisow ON domena_tagi.id = domena_tagi_wpisow.id_tagu WHERE id_wpisu ='$id%'


Mam pytanie, jak teraz klikając na tag pobrać artykuły zawierające ID tagu?

nazwę slug-tagu pobieram
  1. $_GET['tag']


i teraz slug tagu z get z tabeli: tagi_test -> pobrać ID tego tagu na podstawie tego slug'u -> z tabeli: tagi_wpisow_test pobrać ID artykułu który został przypisany do id tego tagu

Czy to jest dobre rozwiązanie? czy sa prostrze metody na pobranie?
Go to the top of the page
+Quote Post
Pyton_000
post
Post #38





Grupa: Zarejestrowani
Postów: 8 068
Pomógł: 1414
Dołączył: 26.10.2005

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


Spróbuj coś na zasadzie:
  1. SELECY * FROM tagi_test t JOIN tagi_wpisow_test tw ON(t.id = tw.id_tagu) JOIN wpisy_test w ON(w.id = tw.id_wpisu) WHERE t.slug = 'twoj_slug'


To chyba powinno Ci zwrócić kilka wierszy, ale pewien nie jestem (IMG:style_emoticons/default/smile.gif)
Jeśli nie to możesz pobrać ID tagu podzapytaniem :
  1. SELECY * FROM tagi_wpisow_test tw JOIN wpisy_test w ON(w.id = tw.id_wpisu) WHERE tw.id_tagu IN (SELECT id FROM tagi_test WHERE slug = 'sss' )
Go to the top of the page
+Quote Post
qoqo
post
Post #39





Grupa: Zarejestrowani
Postów: 53
Pomógł: 0
Dołączył: 5.06.2014

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


super (IMG:style_emoticons/default/smile.gif) działa (IMG:style_emoticons/default/smile.gif) dziękuję bardzo (IMG:style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post

2 Stron V   1 2 >
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: 24.08.2025 - 12:43