Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP][MYSQL] Wyszukiwarka z Bazy Danych
Forum PHP.pl > Forum > Przedszkole
Poker
Witam serdecznie...

Muszę zrobić wyszukiwarkę na stronę, która odpowiednio wyszukiwałaby i wyświetlała elementy w z bazy danych.


Otóż działanie jest takie wpisuję w szukajce słowo "zielony" i chciałbym aby znalazło mi te ID z bazy w których występuje dane słowo.


Lecz problem polega na tym że każdy REKORD ma pole KEYWORDS w którym słowa kluczowe wpisywane są w taki sposób :

1.- niebieski, ciemny, bielizna, kobieta, sklep, zakupy, darmowy szablon, allegro szablony
2.- zielony, kobieta, plaża, słońce, wakacje, kwiatki, darmowy, allegro
3.- niebieski, zakupy, odzież, granatowy, sklep, sprzedaż, porady allegro
4.- zakupy online, zakupy, fioletowy, ciuchy, ubrania, ubranka, sprzedawca, różowy, pink, kwiatki
5.- prezent, prezenty, niebieski, ciuchy, odzież, sklep, odzieżowy, zakupy

I powinno dać mi rekord o ID 2 biggrin.gif lecz nie wiem kompletnie jak się do tego zabrać nigdy czegoś takiego nie robiłem i za bardzo nie wiem, czytałem w google i nic nie wyczytałem konkretnego...

Moje rozumowanie jest takie :
1. pobrać wszystkie keyworods z bazy
2. wyexplodować przecinki tak aby otrzymać pojedyncze słowa
3. sprawdzić do którego z eksplodowanych keywordsów pasuje słowo z szukajki
4. odebrać ID elementu w którym znajduje się dany keyword


Problem mam taki że nie wiem JAK zdobyć to ID?

Może ktoś ma inny pomysł łatwiejszy;> Nie chcę tutaj gotowych kodów tylko teorię, resztą zajmę się sam i przy okazji się czegoś nauczę smile.gif

Z góry bardzo dziękuje smile.gif
marian2299
Select `id` po prostu, tak mi się wydaje winksmiley.jpg.
Poker
no to by było proste:D tylko pobieram wszystkie słowa kluczowe:D z nich wyszukuje słowa które odpowiadają tym z szukajki i problem taki że id wyciągnąć się nie da:D bo ja robię coś źle.


Moje działanie jest dokładnie takie :

1. $hopsa=mysql_query("SELECT * FROM xxx");
2. WHILE($rekord=mysql_fetch_array($hopsa)) {
3. tutaj eksploduje sobie keywordsy i dopasowywuje do słów z szukajki:D
4. i zostają mi te słowa które pasują ale nie ma jak wyciągnąć ID;>

Nie wiem czy w ogóle w jasny sposób opisuje swój problem, nie mam zdolności humanistycznych.


Mógłbym zrobić coś na zasadzie nowej tabeli w bazie i tam

ID_PLIKU
KEYWORD


ale jeśli mam 300 plików i do każdego ~15 słów kluczowych to chyba nie ma sensu ?
ayeo
Witam!

Oczywiście, że ma sens i jest to jedyne dobre wyjście. Jeśli chcesz trzymać te słowa kluczowe po przecinku jako TEXT i potem szukać REGEP'em to na bank nie oszczędzisz. Nie mówiąc już o rozszerzalności takiego rozwiązania. Dla bazy 10k rekordów to krótki kaszel, dobry indeks i nawet tego nie poczuje.

Pozdrawiam!
Poker
w takim razie to ogromne ułatwienie dla mnie, i zrobię to takim sposobem smile.gif

Dziękuje za odpowiedź smile.gif
Fifi209
A nie prościej zrobić osobną tabelę z tagami?

id, tag, topic_id

Zawsze to łatwiej i mniejsze obciążenie.
ayeo
No tak to przecież ma działać. Kwestia tylko czy trzymamy keywordsy w osobnej tabeli i robimy referencję wielu do wielu czy przypisujemy słowo do elementu bezpośrednio (id_elementu, word).
phpion
  1. SELECT * FROM `tabela` WHERE `keywords` LIKE "%zielony%";
ayeo
Witam!

Faktycznie, trudno odmówić Ci racji winksmiley.jpg Twoje rozwiązanie jest jak najbardziej w porządku. Pomijając oczywiście ewentualną rozbudowę, zarządzanie tagami itd tongue.gif

Pozdrawiam!
phpion
Witam!

Faktycznie, trudno odmówić Ci racji winksmiley.jpg Nie sądzę aby kolega chciał przebudowywać strukturę bazy danych, raczej chciałby osiągnąć zamierzony efekt jak najmniejszym nakładem pracy stąd moja sugestia z wykorzystaniem LIKE. Nie zmienia to faktu, że poprawne rozwiązanie tego problemu (normalizacja) byłoby najlepszym rozwiązaniem.

Pozdrawiam!

hehe smile.gif
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.