![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 3 Pomógł: 0 Dołączył: 30.11.2006 Ostrzeżenie: (0%) ![]() ![]() |
Witam,
mam problem z wybraniem danych z tabel polaczonych relacja wiele do wielu Jeśli ktoś będzie mógł mi pomoc to poprosze o podpowiedz Są trzy tabele: Zapytanie: pokaz nazwiska i imiona osob ktore znaja angielski podstawowy i rosyjski podstawoawy Powinien wyswietlic wynik (dwie osoby): 1) Wax Colanko 2) Piotr Kowalski TABELE: 1) tbl_user - id_user - imie_user - nazwisko_user 2) tbl_jezyki_obce - id_jezyka - nazwa_jezyka 3) tbl_jezyki_user (tabela łącząca) - id_jezyki_users - id_user - id_jezyka Przykładowe dane w tabelach: tbl_user: 1 - Wax - Colanko 2 - Piotr - Kowalski 3 - Jakub - Wisniewski tbl_jezyki_obce: 1 - angieslki podstawoawy 2 - angielski sredni 3 - angielski zaawansowany 4 - niemiecki podstawoawy 5 - niemiecki sredni 6 - niemiecki zaawansowany 7 - rosyjski podstawoawy 8 - rosyjski sredni 9 - rosyjski zaawansowany tbl_jezyki_user: 1 - 1 - 1 2 - 1 - 5 3 - 1 - 7 4 - 2 - 1 5 - 2 - 4 6 - 2 - 7 7 - 3 - 2 8 - 3 - 4 9 - 3 - 7 moje zapytanie ktore nie dziala!!! - co tutaj jest nie tak? SELECT tbl_user.imie_user, tbl_user.nazwisko_user FROM tbl_user, tbl_jezyki_obce, tbl_jezyki_user WHERE tbl_jezyki_user.id_user = tbl_user.id_user AND tbl_jezyki_user.id_jezyka = tbl_jezyki_obce.id_jezyka AND (tbl_jezyki_user.id_jezyka = '1' AND tbl_jezyki_user.id_jezyka = '7') id_jezyka = '1' -> angielski podstawoawy id_jezyka = '7' -> rosyjski podstawoawy oczekiwany wynik: 1) Wax Colanko 2) Piotr Kowalski tylko te dwie osoby znaja oba jezyki angielski podstawoawy i rosyjski podstawoawy Dzieki i pozdrawaim, Marcel |
|
|
![]() |
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 380 Pomógł: 2 Dołączył: 5.01.2007 Ostrzeżenie: (0%) ![]() ![]() |
mam problem z wybraniem danych z tabel polaczonych relacja wiele do wielu to znaczy jaki problem? bo na razie tylko opisales co masz a nie napisales czego nie umiesz zrobic?Cytat moje zapytanie ktore nie dziala!!! - co tutaj jest nie tak? nie dziala to znaczy co? wywala bledy czy co?co w "tlumaczeniu na polski" robi ten warunek: ? |
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 3 Pomógł: 0 Dołączył: 30.11.2006 Ostrzeżenie: (0%) ![]() ![]() |
chodzi o to aby pokazal osoby ktore znaja dwa jezyki: angielski
podstawowy i rosyjski podstawoawy zapytanie ktore przedstawilem nie wyswielta oczekiwanego wyniku tzn: dla mnie wynikiem sa osoby: 1) Wax Colanko 2) Piotr Kowalski tylko te dwie osoby znaja oba jezyki angielski podstawoawy i rosyjski podstawoawy trzecia osoba z przykaldu Jakub Wisniewski zna rosyjski podstawoawy ale nie zna angielskiego podstawowego wiec nie powinien sie wyswietlic (tbl_jezyki_user.id_jezyka = '1' AND tbl_jezyki_user.id_jezyka = '7') - uznalem ze to jest wrunek aby wybrac angielski podstawoawy i rosyjski podstawoawy tzn: id_jezyka = '1' -> angielski podstawoawy id_jezyka = '7' -> rosyjski podstawoawy Widocznie zle rozumiem te relacje i nie potrafie ulozyc odpowiedniego zapytanie dlatego prosze o pomoc. W skrocie moje pytanie brzmi: Prosze napisac zapytanie ktore na podstawie przedstawionych tabel i wartosci wyswietli tylko te osoby ktore znaja oba jezyki. (angielski podstawoawy i rosyjski podstawoawy) Pozdr, Marcel Ten post edytował marceli80 14.02.2007, 11:22:07 |
|
|
![]()
Post
#4
|
|
Grupa: Zarejestrowani Postów: 23 Pomógł: 0 Dołączył: 24.07.2006 Ostrzeżenie: (0%) ![]() ![]() |
Moja propozycja:
Lub też jeżeli jest SQL z obsługą podzapytań:
Pozdrawiam Kosmi |
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 380 Pomógł: 2 Dołączył: 5.01.2007 Ostrzeżenie: (0%) ![]() ![]() |
(tbl_jezyki_user.id_jezyka = '1' AND tbl_jezyki_user.id_jezyka = '7') troche przekombinowales bo pole nie moze miec dwoch roznych wartosci jednoczesnie, masz blad logiczny w tym wlasnie fragmencie zapytania
- uznalem ze to jest wrunek aby wybrac angielski podstawoawy i rosyjski podstawoawy |
|
|
![]()
Post
#6
|
|
Grupa: Zarejestrowani Postów: 8 Pomógł: 0 Dołączył: 25.11.2008 Ostrzeżenie: (0%) ![]() ![]() |
Witam!
Odświeżam temat, bowiem napotkałem na podobny problem jak marceli80. Z tego, co mi do tej pory poradzono to powinienem zamienić relację wiele do wielu na jeden do wielu. Nie wiem jednak jak to zrobić i czy to w ogóle sprawdzi się w tym przypadku. Jeśli ktoś miał podobny problem, to bardzo proszę o jakieś wskazówki. Z góry dziękuję i pozdrawiam (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) . Dawid. |
|
|
![]()
Post
#7
|
|
Grupa: Moderatorzy Postów: 15 467 Pomógł: 1451 Dołączył: 25.04.2005 Skąd: Szczebrzeszyn/Rzeszów ![]() |
A podstawy baz danych zna?
|
|
|
![]()
Post
#8
|
|
Grupa: Zarejestrowani Postów: 8 Pomógł: 0 Dołączył: 25.11.2008 Ostrzeżenie: (0%) ![]() ![]() |
Zna, zna (IMG:http://forum.php.pl/style_emoticons/default/biggrin.gif) . Poradzono mi zapoznać się z normalizacją bazy danych. Nie wiem jednak czy to zagadnienie coś pomoże.
Przedstawię może pokrótce mój przykład: Tabela users_cars: (IMG:http://i30.tinypic.com/ngzpmt.jpg) Jest to tabela pomocnicza przy relacji wiele do wielu. Chcę w jednym zapytaniu uzyskać ID użytkownika, który posiada określone samochody. Dla przykładu mając dane ID samochodów 1, 2 i 3, powinienem jako wynik uzyskać 2. Zapytanie typu: "SELECT userID FROM users_cars WHERE carID IN (1, 2, 3)" nie działa tak jak chcę, bowiem zwraca użytkowników, którzy posiadają samochody 1 lub 2 lub 3. Wgłębiam się powoli w temat normalizacji bazy danych, jednak jak na razie nie widzę nic nowego co mogłoby mi się przydać. Pozdrawiam, Dawid Ten post edytował Namrasit 21.07.2009, 15:52:08 |
|
|
![]()
Post
#9
|
|
Grupa: Moderatorzy Postów: 15 467 Pomógł: 1451 Dołączył: 25.04.2005 Skąd: Szczebrzeszyn/Rzeszów ![]() |
No skoro podałeś nazwę nie tej kolumny, co trzeba, to się dziwisz...? PS. zdałoby się distinct.
|
|
|
![]()
Post
#10
|
|
Grupa: Zarejestrowani Postów: 8 Pomógł: 0 Dołączył: 25.11.2008 Ostrzeżenie: (0%) ![]() ![]() |
To była tylko literówka (IMG:http://forum.php.pl/style_emoticons/default/tongue.gif) . Jeśli chodzi o DISTINCT to chyba za wiele tu nie pomoże. Polecenie to usuwa identyczne wiersze zwrócone w zapytaniu, w przy tym problemie nie o to chodzi.
Może napisze tak: Mając taki układ tabel (IMG:http://i29.tinypic.com/qsuni8.jpg) Widzimy, że jedna osoba może jeździć kilkoma samochodami, a każdym samochodem może jeździć wiele osób (przykład wyssany z palca (IMG:http://forum.php.pl/style_emoticons/default/tongue.gif) ). Naszym zadaniem jest znalezienie osoby, która jeździ tylko przykładowo trzema podanymi samochodami (carID: 1, 2 i 3). Jak to zrobić? Wszelkie zapytania, które próbowałem formułować, powodują wyświetlenie użytkowników jeżdżących samochodem 1 lub 2 lub 3. Dziękuję za wszelkie sugestie i jeszcze raz pozdrawiam, Dawid. |
|
|
![]()
Post
#11
|
|
Grupa: Moderatorzy Postów: 15 467 Pomógł: 1451 Dołączył: 25.04.2005 Skąd: Szczebrzeszyn/Rzeszów ![]() |
Aha, masz na myśli osoba, która jeździ 1 I 2 I 3, a nie 1 LUB 2 LUB 3?
|
|
|
![]()
Post
#12
|
|
Grupa: Zarejestrowani Postów: 8 Pomógł: 0 Dołączył: 25.11.2008 Ostrzeżenie: (0%) ![]() ![]() |
Dokładnie tak (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) . Chodzi o 1 i 2 i 3 jednocześnie.
|
|
|
![]()
Post
#13
|
|
Grupa: Moderatorzy Postów: 15 467 Pomógł: 1451 Dołączył: 25.04.2005 Skąd: Szczebrzeszyn/Rzeszów ![]() |
|
|
|
![]()
Post
#14
|
|
Grupa: Zarejestrowani Postów: 8 Pomógł: 0 Dołączył: 25.11.2008 Ostrzeżenie: (0%) ![]() ![]() |
Taki warunek raczej nie przejdzie. Zapytanie typu:
jest logicznie niemożliwe, zresztą tego typu złożenie były już poruszane w tym temacie (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) Dawid. |
|
|
![]()
Post
#15
|
|
Grupa: Moderatorzy Postów: 15 467 Pomógł: 1451 Dołączył: 25.04.2005 Skąd: Szczebrzeszyn/Rzeszów ![]() |
|
|
|
![]()
Post
#16
|
|
Grupa: Zarejestrowani Postów: 8 Pomógł: 0 Dołączył: 25.11.2008 Ostrzeżenie: (0%) ![]() ![]() |
W tym przypadku jest tak samo jak w poprzednim, wartości carID nie mogą być równocześnie równe 1, 2 i 3 (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
Dawid. |
|
|
![]()
Post
#17
|
|
Grupa: Moderatorzy Postów: 15 467 Pomógł: 1451 Dołączył: 25.04.2005 Skąd: Szczebrzeszyn/Rzeszów ![]() |
|
|
|
![]()
Post
#18
|
|
Grupa: Zarejestrowani Postów: 8 Pomógł: 0 Dołączył: 25.11.2008 Ostrzeżenie: (0%) ![]() ![]() |
Powiem Ci, że problem bardzo ciekawy. Zwykle nie udzielam się na forach, bo wszystko znajduję w sieci, ale w tym przypadku jest inaczej (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) .
Wracając do tematu, to Twoje zapytanie po wstępnych testach wydaje się działać prawidłowo (IMG:http://forum.php.pl/style_emoticons/default/biggrin.gif) . Pozwoliłem sobie je tylko troszkę przerobić:
W ten sposób w wyniku otrzymujemy tylko użytkownika który spełnia tylko i wyłącznie te 3 kryteria. Takie niby OR ale AND (IMG:http://forum.php.pl/style_emoticons/default/tongue.gif) . Będę to testował na większej aplikacji i zobaczę jak się sprawuje. Wstępnie masz piwko u mnie (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) . Pozdrawiam Dawid. |
|
|
![]() ![]() |
![]() |
Aktualny czas: 14.09.2025 - 19:57 |