![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 3 Pomógł: 0 Dołączył: 13.03.2014 Ostrzeżenie: (0%) ![]() ![]() |
Witam wszystkich
Mam następujący problem. W większości katalogów firm lub stron istnieje możliwość przypisania jednej firmy lub strony do kilku branż. Mam oczywiście stworzoną oddzielną tabele zawierającą branże i oddzielną tabelę dla firm. --------------------------------------------- w przypadku jeśli pozostawiam możliwość przypisania firmy tylko do jednej branży nie ma problemu: SELECT * FROM jakas_tabela WHERE branza = '$id_branzy' ---------------------------------------------- Rozwiązałem to tak, że do bazy dodałem dodatkowe pola: branza_1, branza_2, branza_3, branza_4 problem pojawia się przy próbie pobierania danych i przeszukiwaniu wg tych kryteriów: SELECT * FROM jakas_tabela WHERE (branza = '$id_branzy' OR branza_1 = '$id_branzy' OR branza_2 = '$id_branzy' OR branza_3 = '$id_branzy' OR branza_4 = '$id_branzy') To rozwiązanie oczywiście jest nieoptymalne a użycie operatora OR w takiej ilości sprawia, że na wyniki trzeba czekać bardzo długo. Jeśli macie jakiś gotowy i wydajny sposób na przypisywanie jednej firmy do kilku branż i skuteczny przeszukiwanie bazy (pobieranie wyników) Za podrzucenie rozwiązania wyznaczam nagrodę 50 zł (przelew na konto) Pozdrawiam D |
|
|
![]() |
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 6 381 Pomógł: 1116 Dołączył: 30.08.2006 Ostrzeżenie: (0%) ![]() ![]() |
Powinieneś mieć dodatkową tabelę firmy_branze (id_firmy, id_branzy). Po tym robisz złączenie i masz wszystkie potrzebne wyniki.
|
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 3 Pomógł: 0 Dołączył: 13.03.2014 Ostrzeżenie: (0%) ![]() ![]() |
Powinieneś mieć dodatkową tabelę firmy_branze (id_firmy, id_branzy). Po tym robisz złączenie i masz wszystkie potrzebne wyniki. Wiąże się to z koniecznością stworzenia dodatkowej tabeli, która przy 600 tys firm urośnie do sporych rozmiarów no i w zasadzie przeszukuję dwie tabele. Czekam ... może będą lepsze pomysły. |
|
|
![]()
Post
#4
|
|
Grupa: Zarejestrowani Postów: 1 240 Pomógł: 278 Dołączył: 11.03.2008 Ostrzeżenie: (0%) ![]() ![]() |
Tabela z dwoma polami INT zajmuje 8 bajtów. Przy 600 tys. firm (założmy, że średnio 1 firma = 3 branże) wyjdzie 14400000 bajtów co daje niecałe 14 MB. Myślę, że to w cale nie jest "spory rozmiar" dla tej wielkości bazy firm. Optymalniejszego rozwiązania nie znajdziesz.
|
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 6 381 Pomógł: 1116 Dołączył: 30.08.2006 Ostrzeżenie: (0%) ![]() ![]() |
I zwyczajnie jest to zgodne ze sztuką http://pl.wikipedia.org/wiki/Posta%C4%87_n...8bazy_danych%29
|
|
|
![]()
Post
#6
|
|
Grupa: Zarejestrowani Postów: 616 Pomógł: 84 Dołączył: 29.11.2006 Skąd: bełchatów Ostrzeżenie: (0%) ![]() ![]() |
Słuchaj viking'a , podstawa relacji wiele do wielu. 600 tyś dla bazy to nic
|
|
|
![]()
Post
#7
|
|
Grupa: Zarejestrowani Postów: 1 421 Pomógł: 310 Dołączył: 18.04.2012 Ostrzeżenie: (0%) ![]() ![]() |
|
|
|
![]()
Post
#8
|
|
Grupa: Zarejestrowani Postów: 3 Pomógł: 0 Dołączył: 13.03.2014 Ostrzeżenie: (0%) ![]() ![]() |
Zwycięzcą został markuz
Podesłał mi pomysł i przykłady wdrożenia. Gratulacje :-) Pozdrawiam Darek
+ indexy odpowiednie Ale oczywiscie wyglada mi to na zjeb...ne jeden do wielu Chyba coś jest nie tak z tym zapytaniem Ten post edytował blazej88 13.03.2014, 12:30:41 |
|
|
![]()
Post
#9
|
|
Grupa: Zarejestrowani Postów: 1 421 Pomógł: 310 Dołączył: 18.04.2012 Ostrzeżenie: (0%) ![]() ![]() |
|
|
|
![]()
Post
#10
|
|
Grupa: Zarejestrowani Postów: 124 Pomógł: 22 Dołączył: 10.01.2014 Ostrzeżenie: (0%) ![]() ![]() |
Chyba jestem ułomny bo nie czaje różnicy pomiędzy tym co napisał @markuz a @viking
|
|
|
![]() ![]() |
![]() |
Aktualny czas: 4.10.2025 - 14:53 |