![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 4 Pomógł: 0 Dołączył: 2.08.2009 Ostrzeżenie: (0%) ![]() ![]() |
Witam
Posze o pomoc w rozwiazaniu mojego problemu Mam 2 tabele meble i elementy w tabeli meble mam pola ID, Nazwa i Zestaw Pole Zestaw zawiera elementy użyte przy produkcji czyli wkrety, blat, ściana tylna itp. w tabeli elementy mam pola elID, elNazwa i elFoto problem polega na tym ze musze pobrać z tabeli meble pole zestaw, rozbić je na poszczegolne elementy, nastepnie wyszukać te elementy po nazwie w tabeli elementy w polu elNazwa i wyświetlic wszystkie elementy na stronie wraz ze zdjęciami do ktorych linki są zawarte w polu elFoto przede wszystkim nie wiem jak rozbić i wyszukać te elementy Dziekuje za wszelką pomoc Pozdrawiam |
|
|
![]() |
![]()
Post
#2
|
|
![]() Grupa: Zarejestrowani Postów: 54 Pomógł: 4 Dołączył: 22.08.2006 Ostrzeżenie: (0%) ![]() ![]() |
http://dev.mysql.com/doc/refman/5.0/en/join.html
Jeżeli zestaw zawiera id pola elementu , to robisz tak:
Jeżeli zaś w zestaw masz coś typu `element1;element2;element3`, to nie ma innej opcji jak explode. Polecam w tym wypadku inaczej skonstruować bazę danych , by wystarczyło tylko jedno zapytanie. Zresztą zły dział, twój problem dotyczy bazy danych, a nie php. Ten post edytował z3L 2.08.2009, 19:38:20 -------------------- ...
|
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 4 Pomógł: 0 Dołączył: 2.08.2009 Ostrzeżenie: (0%) ![]() ![]() |
W tym właśnie jest problem, że mam to coś typu `element1;element2;element3`. Myślałem właśnie nad explode, ale nie mam pomysłu na przejści z explode do zapytania w tabeli elementy.
Niestety nie mogę poprawić bazy, ponieważ jest już utworzona, dość duża i zależna od innego oprogramowania |
|
|
![]()
Post
#4
|
|
Grupa: Zarejestrowani Postów: 1 374 Pomógł: 149 Dołączył: 1.03.2006 Ostrzeżenie: (0%) ![]() ![]() |
W tym właśnie jest problem, że mam to coś typu `element1;element2;element3` To zmień konstrukcję tabeli zanim się pogrążysz i spłodzisz gniota. Przepraszam za ostre słowa,ale jak chcesz się czegoś nauczyć to ucz się przede wszystkim jak robić coś dobrze, a nie jak rzeźbić w czymś takim. Konstrukcja tabeli powinna być taka: Meble: ID, Nazwa Elementy: ID, Nazwa Zestawy: ID_elementu, ID_mebla Wtedy pięknym zapytaniem możesz wyłuskać wszystkie dane bez rzeźbienia w PHP. Niestety nie mogę poprawić bazy, ponieważ jest już utworzona, dość duża i zależna od innego oprogramowania Możesz i powinieneć. Niewielkim skryptem w PHP możesz rozwalić tę pierwszą tabelę na Dwie (Meble i Zestawy). Naprawdę zrób to. Ten post edytował JoShiMa 2.08.2009, 20:08:52 -------------------- |
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 4 Pomógł: 0 Dołączył: 2.08.2009 Ostrzeżenie: (0%) ![]() ![]() |
Cytat Niewielkim skryptem w PHP możesz rozwalić tę pierwszą tabelę na Dwie (Meble i Zestawy). Jeśli się mylę proszę mnie poprawić, musiałbym skorzystać z explode i wysłać zapytaniem do tabeli zestawy. Jeżeli dobrze to zrozumiałem to niemiałbym problemu z pozostaniem w obecnym kształcie bazy, a jak już napisałem nie mam pomysłu na przejście z explode do zapytania w tabeli elementy Baza pochodzi z programu handlowo magazynowego i jest synchronizowana z MySQL |
|
|
![]()
Post
#6
|
|
Grupa: Zarejestrowani Postów: 1 374 Pomógł: 149 Dołączył: 1.03.2006 Ostrzeżenie: (0%) ![]() ![]() |
Powinni wieszać za konstruowanie takich gniotów... Ani to wygodne ani optymalne.
Teraz co możesz zrobić to dla każdego rekordu z tabeli Meble wczytać string Zestaw i wykorzystać go w klauzuli IN bez explode. To zmniejszy ilość zapytań. Gdybyś użył explode musiał byś wykonać tyle dodatkowych zapytań ile masz tych elementów w stringu Zestaw Ten post edytował JoShiMa 2.08.2009, 20:30:39 -------------------- |
|
|
![]()
Post
#7
|
|
![]() Grupa: Zarejestrowani Postów: 54 Pomógł: 4 Dołączył: 22.08.2006 Ostrzeżenie: (0%) ![]() ![]() |
Jeśli się mylę proszę mnie poprawić, musiałbym skorzystać z explode i wysłać zapytaniem do tabeli zestawy. Jeżeli dobrze to zrozumiałem to niemiałbym problemu z pozostaniem w obecnym kształcie bazy, a jak już napisałem nie mam pomysłu na przejście z explode do zapytania w tabeli elementy Baza pochodzi z programu handlowo magazynowego i jest synchronizowana z MySQL Jak już musisz, ale jest to mało wydajne, ponieważ robisz więcej niepotrzebnych zapytań. Explode rozbija Ci dane do tablicy, zajrzyj do manuala. W przypadku , gdy pobierasz więcej wyników, to musisz użyć pętli. Poczytaj o tablicach, jeżeli ich nie rozumiesz , bo na tym będziesz bazował. Następnie proponuje obrobić odpowiednio tablice z explode, tak, by powstało tylko jedno zapytanie:
Prościej nie potrafię, może nie jest to najlepsze rozwiązanie, ale pozwoli zredukować liczbę zapytań do 2. Ten post edytował z3L 2.08.2009, 20:44:36 -------------------- ...
|
|
|
![]()
Post
#8
|
|
Grupa: Zarejestrowani Postów: 4 Pomógł: 0 Dołączył: 2.08.2009 Ostrzeżenie: (0%) ![]() ![]() |
HMMM a może prościej by było w drugą stronę zadziałać tzn. sprawdzić każdy z rekordów tabeli elementy czy jest w tabeli meble w komórce zestaw.
co myślicie o tym rozwiązaniu? czy nie będzie za mało wydajne? |
|
|
![]()
Post
#9
|
|
![]() Grupa: Zarejestrowani Postów: 54 Pomógł: 4 Dołączył: 22.08.2006 Ostrzeżenie: (0%) ![]() ![]() |
HMMM a może prościej by było w drugą stronę zadziałać tzn. sprawdzić każdy z rekordów tabeli elementy czy jest w tabeli meble w komórce zestaw. co myślicie o tym rozwiązaniu? czy nie będzie za mało wydajne? Głupie, potrzebujesz na start 2 zapytań , a później jeszcze w php porównujesz. Tamto jest bardziej wydajne. -------------------- ...
|
|
|
![]() ![]() |
![]() |
Wersja Lo-Fi | Aktualny czas: 23.06.2025 - 02:15 |