Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

2 Stron V   1 2 >  
Reply to this topicStart new topic
> [MYSQL] 2 tabele złaczenie
kielich
post
Post #1





Grupa: Zarejestrowani
Postów: 442
Pomógł: 4
Dołączył: 28.12.2008
Skąd: Warszawa

Ostrzeżenie: (20%)
X----


Witam mam dość dziwny przypadek i myśle że ktoś pomoże mi go rozwikłać mam mam dwie tabele nazwy,zamowienia (w tabeli zamówienia mam 2 rekordy i w tabeli nazwy mam też 2 rekordy)

chce je połaczyć ale po złączeniu robia sie 4 rekordy dlaczego nie 2 tyle ze sklejone??
o to jak to robie

  1. SELECT nazwy.name, zamowienia.nazwa_prod
  2. FROM nazwy,zamowienia WHERE nazwy.user=zamowienia.klient

otrzymuje zamiast 2 sklejonych rekordów takie cos :

name | nazwa_prod
Kaska | nazwjakas
kowale | Jakas nazwaasdsad
kowale | nazwjakas
Kaska | Jakas nazwaasdsad

Potrzebuje miesc np w taie postaci

name | nazwa_prod
Kaska | nazwjakas
kowale | Jakas nazwaasdsad






Go to the top of the page
+Quote Post
nospor
post
Post #2





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




widac dla kazdego nazwy.user odpowiadają dwa rekordy zamowienia.klient
Nie ma więc tu nic dziwnego (IMG:style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
john_doe
post
Post #3





Grupa: Zarejestrowani
Postów: 873
Pomógł: 25
Dołączył: 24.07.2005

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


zapytanie wygląda ok. jeśli dostajesz 4 rekordy w wyniku to.... w tabeli zamówień masz, że Kaśka zamówiła dwa przedmioty i ten koleś też.

zrób sobie tak, czytelniej jest
  1.  
  2. SELECT nazwy.name, zamowienia.nazwa_prod
  3.  
  4. FROM nazwy RIGHT JOIN zamowienia ON nazwy.user=zamowienia.klient
  5.  
Go to the top of the page
+Quote Post
kielich
post
Post #4





Grupa: Zarejestrowani
Postów: 442
Pomógł: 4
Dołączył: 28.12.2008
Skąd: Warszawa

Ostrzeżenie: (20%)
X----


nie no mam 2 zamowienia i dwie wpisane nazwy w 2tebeli jedna nazwa do jednego zamowienia w tej i tej tabeli jest ten sam user kurcze ....

chce dokleic same nazwy do tabeli z zamowieniami a robia sie 4 rekordy tak jakby sie mnożyły ;/ jak dokleic same nazwy do zamowien ;/
Go to the top of the page
+Quote Post
nospor
post
Post #5





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




pokaz dokladnie co zawiera pierwsza tabela i dokladnie co zawiera druga tabela
Go to the top of the page
+Quote Post
thek
post
Post #6





Grupa: Moderatorzy
Postów: 4 362
Pomógł: 714
Dołączył: 12.02.2009
Skąd: Jak się położę tak leżę :D




A ja myślę, że ma on jakiś bajzel w bazie. Zauważcie, że z dwóch 2-rekordowych tabel zrobił mu połączenie wszyscy do wszystkich czyli pełny iloczyn kartezjański (IMG:style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
nospor
post
Post #7





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




dlatego właśnie chcę by pokazał dokładnie co on tam ma...
Go to the top of the page
+Quote Post
kielich
post
Post #8





Grupa: Zarejestrowani
Postów: 442
Pomógł: 4
Dołączył: 28.12.2008
Skąd: Warszawa

Ostrzeżenie: (20%)
X----


tabela 1 nazwy
id | name | user

782 | Kaska | Steś
781 | kowale | Staś

tabela 2 zamowienia
id | nazwa_prod | klient

1727 | jakasnazwa | Staś
1726 | jaskasnazwa2 | Staś

wszytskie nie wypisywałem tak jak czas czy cena itp

i tą nazwy z name chce dodac do zamowien
tak jest dokładnie
Go to the top of the page
+Quote Post
nospor
post
Post #9





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




"Steś " to literowka? Powinno byc "Staś" ?

No i taki Kowale łączy się z dwoma rekordami popprzez "Staś" czyli jest tak jak mowilismy. Nie wiem skąd u Ciebie takie zdziwienie...
Go to the top of the page
+Quote Post
kielich
post
Post #10





Grupa: Zarejestrowani
Postów: 442
Pomógł: 4
Dołączył: 28.12.2008
Skąd: Warszawa

Ostrzeżenie: (20%)
X----


tak mój blad jest Stas (IMG:style_emoticons/default/smile.gif) czyli nie mozna tego jakos zeby bylo 2 ;/
Go to the top of the page
+Quote Post
phpion
post
Post #11





Grupa: Moderatorzy
Postów: 6 072
Pomógł: 861
Dołączył: 10.12.2003
Skąd: Dąbrowa Górnicza




Musiałbyś mieć takie dane:
tabela 1 nazwy
id | name | user
782 | Kaska | kas
781 | kowale | kow

tabela 2 zamowienia
id | nazwa_prod | klient
1727 | jakasnazwa | kas
1726 | jaskasnazwa2 | kow
Go to the top of the page
+Quote Post
kielich
post
Post #12





Grupa: Zarejestrowani
Postów: 442
Pomógł: 4
Dołączył: 28.12.2008
Skąd: Warszawa

Ostrzeżenie: (20%)
X----


czyli teraz jak połacze to wychodzi ze zamiast 2 zrobił 4 zamowienia ;/

to jak sie nie da to jak moge najposciej i najwydaniej usunac duplikat
Go to the top of the page
+Quote Post
nospor
post
Post #13





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




Cytat
to jak sie nie da to jak moge najposciej i najwydaniej usunac duplikat
a skad bedziesz wiedzial ktory duplikat chcesz usunać? Oba duplikaty łączą sie z tym samym userem...
Lepiej zaprojektuj baze poprawnie (IMG:style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
kielich
post
Post #14





Grupa: Zarejestrowani
Postów: 442
Pomógł: 4
Dołączył: 28.12.2008
Skąd: Warszawa

Ostrzeżenie: (20%)
X----


Mam rozwiazenie inne ale nie wiem jak poprostu ununac duplikat moze ktos podac przykład

nospor moze podasz jakies rozwiazanie zebym nie musiał całej bazy rozwalac ;/
Go to the top of the page
+Quote Post
nospor
post
Post #15





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




tabela 1
id | name
782 | Kaska
781 | kowale

tabela 2 zamowienia
id | nazwa_prod | id_user
1727 | jakasnazwa | 782
1726 | jaskasnazwa2 | 781
Go to the top of the page
+Quote Post
kielich
post
Post #16





Grupa: Zarejestrowani
Postów: 442
Pomógł: 4
Dołączył: 28.12.2008
Skąd: Warszawa

Ostrzeżenie: (20%)
X----


no to ndala nie rozwiazuje mojego problemu lecz przykład jest jak najbardziej prawidłowy i dział .A dlaczego nie rozwiązuje ponieważ zemy pózniej dodac zamowienie bede musiał to id z tabeli 1 wyciagnac z co za tym idzie pózniej while a ja nie moge miec tego while (IMG:style_emoticons/default/smile.gif) w najgorszym przypadku pózniej musiałbym kasowac duplikaty które niewiem jak.W sumie to bybylo najlepsze rozwiazanie.

Ten post edytował kielich 26.10.2009, 14:27:41
Go to the top of the page
+Quote Post
nospor
post
Post #17





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




Cytat
.A dlaczego nie rozwiązuje ponieważ zemy pózniej dodac zamowienie bede musiał to id z tabeli 1 wyciagnac z co za tym idzie pózniej while a ja nie moge miec tego while w najgorszym przypadku pózniej musiałbym kasowac duplikaty które niewiem jak.W sumie to bybylo najlepsze rozwiazanie.
Nie obraź się, ale nic nie zrozumiałem z tego "bełkotu"...
jaki while, jakie wyciąganie id? Mowisz o przeniesieniu starej bazy na tę nową strukture czy mowisz już o działaniu od początku na nowej strukturze?
Go to the top of the page
+Quote Post
kielich
post
Post #18





Grupa: Zarejestrowani
Postów: 442
Pomógł: 4
Dołączył: 28.12.2008
Skąd: Warszawa

Ostrzeżenie: (20%)
X----


No bo przy opisie produktu user wybiera sobie jego nazwe poczym je zapisuje do bazy pózniej wybiera przesyłkę i na samym koncu zamawia(insert z zamówieniem do bazy ).No i tak, musze jakoś połączyć wybrana nazwe ze złożonym zamówieniem, albo przed zapisaniem zamówienia wyciągnąć wybraną nazwe i razem z zamowieniem zapisać (i tu musiałbym użyć while czego niemoge zrobić ponieważ insert lezy w foreach i zamówienie sie zapisuje x2) dlatego mówiłem o kasowaniu double. Naprawde innaczej nie potrafie tego opisac. (IMG:style_emoticons/default/biggrin.gif)
Go to the top of the page
+Quote Post
nospor
post
Post #19





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




No dobra - ja się poddaje. Każdy kolejny opis zaciąga mnie coraz bardziej w ciemny, niezrozumiały las....
Jak można tak prostą sprawę tak przekombinowac? (IMG:style_emoticons/default/winksmiley.jpg)
No nic, może ktoś inny zrozumie o czym ty do nas rozmawiasz (IMG:style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
thek
post
Post #20





Grupa: Moderatorzy
Postów: 4 362
Pomógł: 714
Dołączył: 12.02.2009
Skąd: Jak się położę tak leżę :D




Nospor... taki bełkot jest w każdym jego temacie (IMG:style_emoticons/default/winksmiley.jpg) Zerknij sobie to sam zobaczysz. Ja już w dwóch innych jego odpowiadam i zawsze kręci nosem, że jakieś pętle nie tak itp. (IMG:style_emoticons/default/smile.gif)
Jak dla mnie, nie rozumie on podstaw leżących w bazach danych. Nie wie dlaczego taka, a nie inna struktura powinna być zastosowana, nie mówiąc już o jej wdrożeniu w życie. Gdybyśmy mu podali zapytanie zwracające zamiast stringa liczbę to pewnie też by się burzył, że to nie ma być tak (IMG:style_emoticons/default/winksmiley.jpg) Nawet o strukturze nie wspominam, bo jakaś zmiana w tabelach pociągnęła by zmianę kodu php. A to moim zdaniem jest już dla niego za trudne bo musiałby wiedzieć gdzie co jest i dostosować do zmian. W jednym z tematów choćby swoich dodaje do koszyka przedmioty, nawet jeśli są one dublami, a z tego co zrozumiałem jego wypowiedź to jeszcze bonusem robi to z input text po nazwie, bez jakiejkolwiek walidacji czy obiekt istnieje w bazie produktów (IMG:style_emoticons/default/blinksmiley.gif)
Dla nas takie coś jest niepojęte, ale próby wyjaśnienia mu i dojścia do sedna jego problemu kończą się masłem maślanym. Po 2 lub 3 próbie jego wyjaśnień o przyczynę problemu dojdziesz do punktu wyjścia i swojego pierwszego proponowanego rozwiązania, które znowu odrzuci z tych samych powodów co kilka postów wyżej. Jakbyś pisał z automatem mającym kilka wbudowanych formułek. A gdy już dojdziecie do czegoś, że działa, to wymyśli nowe problemy, tak jak tutaj z dublami. Ja sobie dałem już spokój z jego tematami bo nawet osoba mająca jakieś podstawy i potrafiąca sensownie pisać potrafiła by zapewne lepiej wyjaśnić czego chce. Uważam nawet, że z niemal kompletnie zieloną w temacie programowania dziewczyną (choćby jolam) łatwiej się porozumieć niż zrozumieć jego wywody.
Go to the top of the page
+Quote Post
askone
post
Post #21





Grupa: Zarejestrowani
Postów: 654
Pomógł: 121
Dołączył: 27.10.2007
Skąd: Poznań, Łódź

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


Hej

Dorzucę i ja swoje trzy grosze w temacie (IMG:style_emoticons/default/winksmiley.jpg) Rozwiązanie zaproponowane przez nospor'a jest zgodne ze standardami projektowania relacyjnych baz danych. Według mnie to rozwiązanie optymalne i nie widzę w nim żadnego problemu (IMG:style_emoticons/default/winksmiley.jpg) Uzupełniłbym jeszcze te 2 tabele o 3 zawierającą listę wszystkich towarów dostępnych w sklepie.

Kod
Table Klienci
Id int
Name text

Table Towary
Id int
Name text

Table Zamowienia
Id int
Id_towar int
Id_klient int


Nie rozumiem dlaczego problemem jest odczytanie id klienta przy składaniu zamówienia? Czyżby system pozwalał składać zamówienia na podstawie nazwy klienta wpisanej "ręcznie"? Jeśli tak to gratuluję pomysłowości (IMG:style_emoticons/default/smile.gif) Wtedy pozostaje tylko czekać jak ktoś bystry zamówi towar na konto innego klienta - bo będzie znał jego nazwę...

Według mnie to aby złożyć zamówienie musi być logowanie, wtedy sprawdzasz dane wpisane przez klienta i pobierasz jego id. Później trzymasz je w sesji i dodajesz do każdego rekordu zamówienia jakie w trakcie tej sesji będziesz wpisywał do bazy. Proste i niezawodne.

Pozdrawiam
Go to the top of the page
+Quote Post
kielich
post
Post #22





Grupa: Zarejestrowani
Postów: 442
Pomógł: 4
Dołączył: 28.12.2008
Skąd: Warszawa

Ostrzeżenie: (20%)
X----


Po pierwszy thek Nie nie mówiłem ze wpisywana nazwa nie jest filtrowana czy cos w tym rodzaju dla twojej wiadomosci jest własna funkcja filtrujaca wchodzących i wychodzący danych z i do bazy (IMG:style_emoticons/default/smile.gif) Ogólnie może nie napisałem jasno o co chodzi ale następnym razem zastanów się nad tym co ty robisz i jak to wykonujesz zanim zaczniesz kogos krytykowac.
Pisząc to chciałem dać podziękowania dla nospor'a "zapaliłeś latarkę w tym ciemnym lesie dzięki temu udało mi sie z niego wyjsc" (IMG:style_emoticons/default/smile.gif) jeszcze raz THX


do zamknięcia
Go to the top of the page
+Quote Post
thek
post
Post #23





Grupa: Moderatorzy
Postów: 4 362
Pomógł: 714
Dołączył: 12.02.2009
Skąd: Jak się położę tak leżę :D




Więc na przyszłość kielich radzę przejrzeć swoje posty przed wduszeniem "Wyślij". Nie jest to złośliwość, bo gdybym taki był to czepiałbym się do ogromnej masy literówek jakie są w Twoich postach. Ale zwrot z innego Twojego tematu, w stylu "wstawiając do tablicy nazwę, którą użytkownik wpisuje do formularza" jawnie wskazuje na niemal kompletny brak walidacji. Właśnie takie opisy sprawiają, że nikt nie wie jak działają Twoje skrypty, co się dzieje na poszczególnych etapach z danymi, czy struktura bazy jest odpowiednia. Wszystko to trzeba wyciągać z Ciebie siłą. Dla przykładu zobacz sobie mój temat z problemem:
http://forum.php.pl/index.php?showtopic=133606
Teraz porównaj ile istotnych danych tam zamieściłem wraz z kilkoma próbami rozwiązania problemu zanim się poddałem i napisałem temat. Wszystkie warianty moich pomysłów opisałem by inni nie musieli mi podawać rozwiązań jakie już przetestowałem.
Widzisz różnicę między Twoimi tematami a moim? Ja podaję to, co może się innym przydać w rozwiązaniu mojego problemu sam od siebie. Osoba czytająca wie po nim już niemal wszystko co potrzebne i jedynie niuanse mogą być niejasne. Dla problemu jaki Ty masz nie znamy w zasadzie nic. Do któregoś momentu nie znaliśmy struktury tabel (poproszono Cię o podanie), nie znamy kodu operującego na tych danych, nie wiemy jak te dane są obrabiane, do czego potrzebne, czy nie są powiązane z czymś co może być istotne by rozwiązać problem. Po prostu rzuciłeś go na forum i czekasz. W momencie zaś gdy są podawane Ci ewentualne rozwiązania nagle okazuje się, że to rodzi problemy następne, wynikające z obsługi tego kodu w jakimś skrypcie lub założeń, o których na początku wcale nie wspominałeś.
Go to the top of the page
+Quote Post

2 Stron V   1 2 >
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: 23.08.2025 - 04:39