Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [php][sql] wyszukiwanie fraz bez duplikatów
SN@JPER^
post 9.06.2015, 19:36:23
Post #1





Grupa: Zarejestrowani
Postów: 266
Pomógł: 0
Dołączył: 4.01.2007
Skąd: Szczecin

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


Witam.

Dodaje artykuł z tagami, jest to pole tags w bazie. Zapisuje w nim tagi w następujący sposób: tag1,tag2,tag3

Podczas dodawania nowych artykułów chce, aby wyszukiwało i podpowiadało względem szukanej frazy, bez duplikatów.

Jak to osiągnąć?

Próbowałem zwykłym LIKE "%ta%", ale wartości są po przecinku i pokazuje całość w danym polu.
Go to the top of the page
+Quote Post
trueblue
post 9.06.2015, 19:37:54
Post #2





Grupa: Zarejestrowani
Postów: 6 800
Pomógł: 1827
Dołączył: 11.03.2014

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


Temat: Zapytanie Mysql z rozdzielaniem ciagu w wyniku


--------------------
Go to the top of the page
+Quote Post
SN@JPER^
post 9.06.2015, 20:49:19
Post #3





Grupa: Zarejestrowani
Postów: 266
Pomógł: 0
Dołączył: 4.01.2007
Skąd: Szczecin

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


Hmmm... przeczytałem wątek i nie rozumiem...

niby chce rozdzielić, a concat mi łączy.

Takie coś wymodziłem:

SELECT tags FROM articles WHERE tags LIKE '%mus%' GROUP BY tags

Z tym, że zamiast wyświetlić mi tagi:

music
muss
mus... etc.

wyświetla wszystkie rekordy gdzie jest tag music, np. movie,music,cinema

Go to the top of the page
+Quote Post
patwoj98
post 10.06.2015, 06:18:54
Post #4





Grupa: Zarejestrowani
Postów: 218
Pomógł: 16
Dołączył: 6.06.2014
Skąd: Warszawa

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


Bo jak masz w jednym rekordzie kilka tagow to on te kilka wyciagnie. To ma byc dynamiczne?
Go to the top of the page
+Quote Post
Crozin
post 10.06.2015, 07:03:02
Post #5





Grupa: Zarejestrowani
Postów: 6 476
Pomógł: 1306
Dołączył: 6.08.2006
Skąd: Kraków

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


Dlaczego nie masz zwykłej relacji wiele-do-wielu pomiędzy artykułami i tagami tylko jakieś nic nie znaczące (z punktu widzenia bazy danych) teksty?
Go to the top of the page
+Quote Post
SN@JPER^
post 10.06.2015, 21:56:35
Post #6





Grupa: Zarejestrowani
Postów: 266
Pomógł: 0
Dołączył: 4.01.2007
Skąd: Szczecin

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


No właśnie nie chciałem oddzielnej tabeli do tagów i widzę to był błąd (?)

Ten post edytował SN@JPER^ 10.06.2015, 21:56:47
Go to the top of the page
+Quote Post
Crozin
post 10.06.2015, 22:50:31
Post #7





Grupa: Zarejestrowani
Postów: 6 476
Pomógł: 1306
Dołączył: 6.08.2006
Skąd: Kraków

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


Tak, to był błąd. Powinieneś mieć tabelę artykułów (id, tytuł, ...), tagów (id, nazwa, ...) oraz łączącą (id_artykułu, id_tagu). Wtedy nie będziesz miał takich problemów z trywialnymi zadaniami.
Go to the top of the page
+Quote Post
SN@JPER^
post 10.06.2015, 23:07:42
Post #8





Grupa: Zarejestrowani
Postów: 266
Pomógł: 0
Dołączył: 4.01.2007
Skąd: Szczecin

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


Mam dodanych już 1500 artykułów, da się to zrobić tak jak mowilem? Rozdzielajac w sql?
Go to the top of the page
+Quote Post
Crozin
post 10.06.2015, 23:14:17
Post #9





Grupa: Zarejestrowani
Postów: 6 476
Pomógł: 1306
Dołączył: 6.08.2006
Skąd: Kraków

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


To napisz sobie prosty skrypt, który przerobi obecne, kulawe rozwiązanie na normalne. Zajmie Ci to zapewne 2 razy mniej czasu niż kombinowanie przy obecnej strukturze.
Go to the top of the page
+Quote Post
SN@JPER^
post 11.06.2015, 00:55:45
Post #10





Grupa: Zarejestrowani
Postów: 266
Pomógł: 0
Dołączył: 4.01.2007
Skąd: Szczecin

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


Tak to mam napisane...

in_array wykorzystuje

  1. $sql = 'SELECT tags FROM '._PREFIX_.'article';
  2. $query = mysql_query($sql) or die(mysql_error());
  3. $rows = mysql_num_rows($query);
  4. $tags_a = array();
  5. if($rows>0){
  6. while($fetch = mysql_fetch_array($query)){
  7. $tags = htmlspecialchars(stripslashes($fetch['tags']));
  8.  
  9.  
  10. $tags_explode = explode(',', $tags);
  11.  
  12. foreach($tags_explode as $tag){
  13. if (!in_array($tag, $tags_a)) {
  14. $tags_a[] = $tag;
  15. }
  16.  
  17. }
  18.  
  19. //echo $tags;
  20. }
  21. }
  22.  
  23.  
  24. echo json_encode($tags_a);

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: 24.06.2025 - 13:23