Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP][MySQL]Podobne tagi z mysql
doknes
post 21.02.2015, 22:52:43
Post #1





Grupa: Zarejestrowani
Postów: 106
Pomógł: 0
Dołączył: 2.11.2014

Ostrzeżenie: (10%)
X----


Hej, mam stronę z anime(serialami) i chcę by na stronie z anime pojawiały się na dole anime podobne. Chce by podobizna tych anime była określana przez gatunek danego anime. Gatunek danego anime pobieram z mysql'a jako jedną zmienną. To co pobieram z bazy wygląda mniej więcej tak: "Fantasy, Komedia, Romans, Sci-Fi" lub po prostu zobaczcie na zdjęciu http://prntscr.com/685cov

Na innym angielskim forum (chyba każdy sie może domyślić jakim) polecono mi bym zrobił coś takiego:
  1. $sql = "SELECT * FROM odc_ListaAnime WHERE gatunek like '%$gatunki%'";
  2. $result = $conn->query($sql);
  3.  
  4. if ($result->num_rows > 0) {
  5. // output data of each row
  6. while ($row = $result->fetch_assoc()) {
  7. $maxodc = $row['maxodc'];
  8. $anime = $row['nazwa'];
  9. echo $anime."<br>";
  10. }
  11. } else {
  12. // echo "<h1> ERROR 404 </h1>";
  13. }
  14. $conn->close();
  15. }


No, ale ma to nie fajny efekt bo pokazuje tylko te anime, które mają idealnie ten sam ciąg liter (tych samych zdań w tej samej kolejności) i w tym to samo anime, a ja chce by wyszukiwało top 3 inne, które mają najbardziej podobne gatunki.



Go to the top of the page
+Quote Post
blahy
post 22.02.2015, 01:26:33
Post #2





Grupa: Zarejestrowani
Postów: 82
Pomógł: 22
Dołączył: 20.07.2010

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


jezeli te nazwy kategorii sa zazwyczaj takie same, to mozesz je pobrac, zrobic explode zeby miec array szukanych kategorii i wtedy zbudowac zapytanie.
zakladajac ze szukasz podobnych seriali do 'gra o tron', ktora ma kategorie: 'fantastyka, dobry, serial' robisz:
  1. SELECT
  2. nazwa,
  3.  
  4. IF (gatunki LIKE '%fantastyka%', 1, 0)+
  5. IF (gatunki LIKE '%dobry%', 1, 0)+
  6. IF (gatunki LIKE '%serial%', 1, 0)
  7. AS kategorie
  8.  
  9. FROM `test`
  10. WHERE nazwa !='gra o tron'
  11. HAVING kategorie > 0
  12. ORDER BY kategorie DESC
  13. LIMIT 3

to 2 pole w selectcie bedzie sie skladac z dynamicznej ilosci ifow (foreach na tych kategoriach). zwroci ile kategorii kazdy rekord ma wspolnych z szukanym.
where usunie aktualny serial,
having usunie seriale, z ktorymi nie ma ani jednej wspolnej kategorii
order zwroci w pierwszej kolejnosci te, ktore maja najwiecej wspolnych kategorii
i limit na tyle ile chcesz dostac podobnych.

wtedy juz kolejnosc nie ma znaczenia
Go to the top of the page
+Quote Post
doknes
post 22.02.2015, 10:18:02
Post #3





Grupa: Zarejestrowani
Postów: 106
Pomógł: 0
Dołączył: 2.11.2014

Ostrzeżenie: (10%)
X----



Problem w tym, że każdy serial może mieć zupełnie inne gatunki od tych, które ja tam wpisze domyślnie (bo strony z serialami są dynamiczne) i
w takim przypadku musiałbym tam wpisać wszystkie gatunki co by mi wyświetlało wszystkie anime co do niczego mnie nie prowadzi. Bo np, jedno jest TYLKO z gatunku mecha i SciFic to wtedy nie wyświetli nic mimo tego, że są anime, które są z tego samego gatunku :/


Masz takie "Live Demo" Jak to wygląda
http://www.anime.maneku.pl/index.php?str=a...TERRA%20FORMARS
http://www.anime.maneku.pl/index.php?str=a...e=Golden%20Time
pod listą odcinków

Go to the top of the page
+Quote Post
blahy
post 22.02.2015, 20:57:27
Post #4





Grupa: Zarejestrowani
Postów: 82
Pomógł: 22
Dołączył: 20.07.2010

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


nie wpisujesz ich tam do zapytania na sztywno. pobierasz je z programu, do ktorego chcesz pobrac podobne. ta czesc zapytania jest dynamiczna (dla kazdego programu inna).

  1. $kategorieProgramu = // pobierasz gdzies z bazy, albo obiektu programu
  2. $kategorieProgramu = explode(',', $kategorieProgramu);
  3.  
  4. $sql = 'SELECT nazwa,';
  5. $ifs = [];
  6. foreach ($kategorieProgramu as $kategoria) {
  7. $ifs[] = "IF (gatunki LIKE '%". trim($kategoria) , "%', 1, 0)";
  8. }
  9.  
  10. $sql .= implode('+', $ifs) . 'AS kategorie';
  11.  
  12. $sql .= " FROM `test`
  13. WHERE nazwa !='gra o tron'
  14. HAVING kategorie > 0
  15. ORDER BY kategorie DESC
  16. LIMIT 3";

To juz pseudokod z glowy.

Dla innego programu bedziesz mial dynamicznie wygenerowane inne zapytanie.
Go to the top of the page
+Quote Post
doknes
post 26.02.2015, 19:11:13
Post #5





Grupa: Zarejestrowani
Postów: 106
Pomógł: 0
Dołączył: 2.11.2014

Ostrzeżenie: (10%)
X----


Nie umiem sobie poradzić z tym kodem co mi dałeś...
Mam tak:
  1. require("connmysql.php");
  2. if ($f == "podobne") {
  3. $kategorieProgramu = $string;
  4. $kategorieProgramu = explode(', ', $kategorieProgramu);
  5.  
  6. $sql = 'SELECT odc_ListaAnime';
  7. $ifs = [];
  8. foreach ($kategorieProgramu as $kategoria) {
  9. $ifs[] = "IF (gatunek LIKE '%" . trim($kategoria) . "%', 1, 0)";
  10. }
  11.  
  12. $sql .= implode('+', $ifs) . 'AS gatunek';
  13.  
  14. $sql .= " FROM odc_ListaAnime
  15. HAVING gatunek > 0
  16. ORDER BY gatunek DESC
  17. LIMIT 3";
  18. $result = $conn->query($sql);
  19. if ($result->num_rows > 0) {
  20. // output data of each row
  21. while ($row = $result->fetch_assoc()) {
  22. $maxodc = $row['maxodc'];
  23. $anime = $row['nazwa'];
  24. if(getLA("lodc", $anime) == $maxodc){
  25. }else{
  26. echo "- <a href='index.php?str=anime&anime=$anime'>$anime</a><br>";
  27. }
  28. }
  29. } else {
  30. echo "<h1> ERROR 404 </h1>";
  31. }
  32. $conn->close();
  33.  
  34. }


a na stronie wyskakuje mi
Notice: Trying to get property of non-object in /home/chumorekgn/www/maneku/get.php on line 301
ERROR 404
Go to the top of the page
+Quote Post
in5ane
post 26.02.2015, 20:14:51
Post #6





Grupa: Zarejestrowani
Postów: 1 335
Pomógł: 34
Dołączył: 9.11.2005
Skąd: Wrocław

Ostrzeżenie: (10%)
X----


Napisz, która linia to linia 301.


--------------------
> > > Tworzenie stron < < <
Go to the top of the page
+Quote Post
doknes
post 26.02.2015, 20:33:21
Post #7





Grupa: Zarejestrowani
Postów: 106
Pomógł: 0
Dołączył: 2.11.2014

Ostrzeżenie: (10%)
X----


"if ($result->num_rows > 0) {"

Czyli linijka 19 w kodzie, który podałem
Go to the top of the page
+Quote Post
blahy
post 26.02.2015, 20:36:34
Post #8





Grupa: Zarejestrowani
Postów: 82
Pomógł: 22
Dołączył: 20.07.2010

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


pewnie tutaj: $result->num_rows masz false jako result, bo zapytanie jest niepoprawne.
zrob sobie var_dump z $sql zanim go wykonasz, przekej do myadmina, czy czego tam uzywasz i popraw az zacznie dzialac.

pierwsze co widze to $sql = 'SELECT odc_ListaAnime'; nie masz tam na koncu przecinka
Go to the top of the page
+Quote Post
doknes
post 28.02.2015, 11:38:08
Post #9





Grupa: Zarejestrowani
Postów: 106
Pomógł: 0
Dołączył: 2.11.2014

Ostrzeżenie: (10%)
X----


No i wyszło mi coś takiego
  1. string(173) "SELECT odc_ListaAnime;IF (gatunek LIKE '%Komedia%', 1, 0)+IF (gatunek LIKE '%Romans%', 1, 0)AS gatunekFROM odc_ListaAnime HAVING gatunek > 0 ORDER BY gatunek DESC LIMIT 3"
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 Wersja Lo-Fi Aktualny czas: 14.08.2025 - 11:19