Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [MySQL]Powiązanie tabel w MySQL
miniol
post
Post #1





Grupa: Zarejestrowani
Postów: 84
Pomógł: 4
Dołączył: 25.03.2011

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


Mam bardzo banalne pytanie. Mianowicie- mam dwie tabele: osoba oraz plec

Zawartość tabeli `osoba` (kolumny: id, imie, nazwisko, plec)
Kod
1 adam nowak 1
2 piotr kowalski 3
3 stefan nowicki 1
4 maria kowalska 2


Kod
Zawartość tabeli `plec` (kolumny: id, nazwa)
1 mężczyzna
2 kobieta
3 brak danych


Jak zadać pytanie mysql, aby wyświetlił mi wszystkie rekordy w takiej postaci
Kod
1 adam nowak mężczyzna
2 piotr kowalski brak danych
3 stefan nowicki mężczyzna
4 maria kowalska kobieta


Czyli prościej mówiąc zamiast id płci, niech wyświetli nazwę płci.

Na obecną chwilę wstawiam takie zapytanie, ale jest błędne.

  1. SELECT * FROM `osoba`,`plec` WHERE 'osoba.plec' = 'plec.id' LIMIT 0 , 30


Domyślam się, że temat był wałkowany pewnie wiele razy, ale szukam już blisko dwie godziny i żadne ze znalezionych rozwiązań mi nie pomogło.

Ten post edytował miniol 29.03.2011, 10:39:47
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 4)
nospor
post
Post #2





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




1) Tworzenie oddzielnej tabeli na płec to lekkie przegięcie (IMG:style_emoticons/default/wink.gif)
2) zwykłe LEFT JOIN załatwi sprawę o którą pytasz

ps:
'osoba.plec'
yyyy,,,,, wiesz co robisz apostrof? Nie wiesz. A jak nie wiesz co dana rzecz robi to jej lepiej nie używaj (IMG:style_emoticons/default/wink.gif)

'osoba.plec' = 'plec.id'
Tutaj zaś porównujesz tekst 'osoba.plec' z 'plec.id'. A od kiedy takie teksty są sobie równe?
Go to the top of the page
+Quote Post
ixpack
post
Post #3





Grupa: Zarejestrowani
Postów: 248
Pomógł: 55
Dołączył: 1.06.2010
Skąd: mam to wiedzieć?

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


  1. SELECT osoba.imie, osoba.nazwisko, plec.nazwa AS plec FROM osoba LEFT JOIN plec ON osoba.plec = plec.id;


Ale jakbyś ujednolicił "plec.id" z "osoba.plec" - tak, że "osoba.plec_id" = "plec.plec_id" - to zamiast "LEFT JOIN plec ON osoba.plec = plec.id" mógłbyś użyć " LEFT JOIN plec using(plec_id);" (IMG:style_emoticons/default/wink.gif)

Pozdr.

Edit: Jakiś mod mnie ubiegł - przebiegłe stworzenia :/. Jeszcze jedna mała uwaga... Nie pytaj o ich płeć - a o ich tytuł (IMG:style_emoticons/default/wink.gif) (Pan, Pani. A dla ang. jeszcze lepiej bo wiesz czy są żonaci ;]).

Ten post edytował ixpack 29.03.2011, 10:50:10
Go to the top of the page
+Quote Post
miniol
post
Post #4





Grupa: Zarejestrowani
Postów: 84
Pomógł: 4
Dołączył: 25.03.2011

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


Akurat potrzebuję tego dla nieco innych celów niż płeć (IMG:style_emoticons/default/wink.gif) , ale dla łatwiejszego zobrazowania mojego problemu użyłem właśnie takich tabel (IMG:style_emoticons/default/smile.gif) Interesuje mnie nr ISBN oraz tytuł książki.

A co do zbędnych apostrofów, to jak łatwo się domyśleć, nie bez powodu pisałem w tym dziale, więc mogłeś już sobie darować te docinki w "przedszkolu" (IMG:style_emoticons/default/wink.gif)

Ale, dzięki za pomoc.

Poniżej poprawne (albo jeśli nie poprawne, to przynajmniej działające) zapytanie:

  1. SELECT osoba.id, osoba.imie, osoba.nazwisko, plec.nazwa FROM osoba LEFT OUTER JOIN plec ON osoba.plec = plec.id LIMIT 0 , 30


ixpack, dzięki za odpowiedź, chociaż tak jak już wspominałeś, nieco się spóźniłeś (IMG:style_emoticons/default/smile.gif)

Ten post edytował miniol 29.03.2011, 11:21:39
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




Cytat
więc mogłeś już sobie darować te docinki w "przedszkolu"
To nie docinki a wskazówki. Mam nadzieję że się do nich zastosujesz na przyszłość: jak nie wiesz co dana rzecz robi to albo sprawdź co robi albo nie używaj (IMG:style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post

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: 24.08.2025 - 09:02