![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 94 Pomógł: 0 Dołączył: 20.03.2010 Ostrzeżenie: (0%) ![]() ![]() |
Witam, mam problem z napisaniem zapytania. Mam sobie dwie tabele: `users` i `houses`.
Struktura `houses`: Kod hid - id rekordu interior entranceX entranceY entranceZ exitX exitY exitZ cost owner - odpowiada id rekordu z tabeli `users` Nie będę przedstawiał całej struktury tabeli `users`, ale indeksem jej jest pole o nazwie `uid`, a nazwa użytkownika to pole `nick`. Teraz tak, potrzebuję napisać zapytanie, które pobierze WSZYSTKO z tabeli `houses`, ale dodatkowo ma pobrać nick użytkownika którego ID równe jest kolumnie owner z tabeli houses, czyli: houses.owner = users.uid. Możliwe jest, że houses.owner może przyjąć wartość 0, a nie mam użytkownika o takim id (liczenie zaczyna się od 1), wtedy tego nicku nie potrzebuję. Oczywiście spróbowałem napisać zapytanie sam, ale nie wyszło mi. Oto one: Kod SELECT h.hid, h.interior, h.entranceX, h.entranceY, h.entranceZ, h.exitX, h.exitY, h.exitZ, h.cost, h.owner, users.nick AS nick FROM houses AS h, users WHERE users.uid=houses.owner Kod #1054 - Unknown column 'houses.owner' in 'where clause' Nie jest zbytnio zaawansowany w SQL. Wiem jak stworzyć bazę, tabele, jakie dobrać typy pól :F, podstawowe zapytania, ale nie siedziałem w tym głębiej. Proszę o pomoc. |
|
|
![]() |
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 706 Pomógł: 108 Dołączył: 12.03.2010 Ostrzeżenie: (0%) ![]() ![]() |
Zamiast 0 lepiej użyć NULL tam, gdzie nie ma właściciela. 0 też zadziała, ale NULL to naturalne rozwiązanie. Rozwiązanie kolegi kpt_lucek - pomijając fakt, że nie działa - jest niedobre. Generuje zbyt dużo zapytań i niewłaściwą strukturę wyniku.
Wypróbuj takie zapytanie:
Kluczem do sukcesu jest tutaj LEFT JOIN, który w przypadku braku dopasowania ze strony dołączanej tabeli (users), mimo wszystko pobierze wiersz. Nick będzie miał wtedy wartość NULL. Przy wyświetlaniu wyników zapytania możesz posłużyć się zwyczajnie pętlą:
|
|
|
![]() ![]() |
![]() |
Aktualny czas: 11.10.2025 - 09:08 |