Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [MySQL][PHP] szukajka ? - nurtujące zapytanie do bazy
stroju
post
Post #1





Grupa: Zarejestrowani
Postów: 179
Pomógł: 2
Dołączył: 17.11.2005

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


Nie do końca wiem jak się za to zabrać, więc opiszę do i jak

mam 2 tabele z bazie danych, np katalog i drugą kategorie. w pierwszej znajdują sie produkty, czyli id, nazwa itd, w drugiej znajdują sie natomiast kategorie, czyli też mamy id i nazwę

jeden produkt może należeć do więcej niż jednej kategorii, dlatego też mam 2 rozwiązania
1) zrobic w tabeli katalog pole i tam oddzielając przecinkami podawać id kategorii i przy odczycie wiadomo expolode i robimy listę
2) zrobić 3 tabele łączącą obie tak że mamy podane id kategorii i id produktu, zatem można w ten sposób dodać kilka kategorii do produktu

ogólnie prosta sprawa

jednak pojawia się problem gdy chcę np zrobić wyszukiwarkę w której np zaznaczam 3 kategorię do których ma należeć dany produkt. sposobem nr 1 można by użyć like jednak gdy id jest np dwucyfrowe to jak pytam o id 1 to pokaże się też 10, 11 ... i tak dalej, co do sposobu nr 2 właśnie nie mogłem nic konkretnego wymyślić

pytanie więc jak to zrobić, bo zdaję sobie sprawę że problem ten zapewne jest banalny (IMG:style_emoticons/default/smile.gif)

Ten post edytował stroju 11.01.2010, 13:37:48
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
bastard13
post
Post #2





Grupa: Zarejestrowani
Postów: 664
Pomógł: 169
Dołączył: 8.01.2010
Skąd: Kraków

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


Tak mniej więcej mi się widzą te tabele:
  1. CREATE TABLE produkty
  2. ( id_p int UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
  3. nazwa char(100) NOT NULL
  4. )type=innodb;
  5. CREATE TABLE katalogi
  6. ( id_k int UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
  7. nazwa char(100) NOT NULL
  8. )type=innodb;
  9. CREATE TABLE co_gdzie
  10. ( id_p int UNSIGNED NOT NULL,
  11. id_k int UNSIGNED NOT NULL,
  12. PRIMARY KEY(id_p,id_k),
  13. FOREIGN KEY (id_k) REFERENCES katalogi(id_k) ON DELETE cascade,
  14. FOREIGN KEY (id_p) REFERENCES produkty(id_p) ON DELETE cascade
  15. )type=innodb;

,a co do zapytania to chyba:
  1. SELECT p.nazwa
  2. FROM produkty AS p, katalogi AS k, co_gdzie AS c
  3. WHERE p.id_p=c.id_p AND k.id_k=c.id_k AND k.nazwa IN('nazwa pierwszego katalogu','nazwa drugiego katalogu') GROUP BY p.nazwa;

Jeśli chodzi o zapytanie to nie jestem do końca pewien, bo pisane na szybko, ale powinno działać.
Go to the top of the page
+Quote Post

Posty w temacie


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: 26.12.2025 - 20:03