Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL]Łączenie tabel
Forum PHP.pl > Forum > Przedszkole
Maniek1313
Mam pytanie jak trzeba ułożyć zapytanie żeby połączyć 3 tabele w jedną.

1 tabela uczniowie (Id Imię Nazwisko)
2 tabela oceny (Id.Przedmiotu Ocena)
3 tabela przedmioty (Id Przedmiot)

I chciałbym tak zrobić żeby tabela wyglądała tak

Imię Nazwisko Przedmiot Ocena
Adi32
  1. SELECT u.imie, u.nazwisko, p.przedmiot, o.ocena FROM uczniowie u LEFT JOIN przedmioty p LEFT JOIN oceny o WHERE u.id=


To nie jest skończone. Tabela oceny powinna mieć id. usera
Maniek1313
Dokończyłem te polecenie tak ale nie działa :

  1. SELECT u.imię, u.nazwisko, p.przedmiot, o.ocena FROM uczniowie u LEFT JOIN przedmioty p LEFT JOIN oceny o WHERE u.id=id.ucznia, p.id=id.przedmiotu;
Adi32
Cytat(Maniek1313 @ 11.07.2011, 09:34:22 ) *
Dokończyłem te polecenie tak ale nie działa :

  1. SELECT u.imię, u.nazwisko, p.przedmiot, o.ocena FROM uczniowie u LEFT JOIN przedmioty p LEFT JOIN oceny o WHERE u.id=id.ucznia, p.id=id.przedmiotu;


A w tabeli oceny dodałeś kolumnę id_ucznia?

co to jest:

  1. id.ucznia

  1. id.przedmiotu
Maniek1313
Tak dodałem do tabeli oceny kolumnę id.ucznia
Adi32
Cytat(Maniek1313 @ 11.07.2011, 09:49:43 ) *
Tak dodałem do tabeli oceny kolumnę id.ucznia


to edytuj ją na 'id_ucznia'
i id.przedmiotu na id_przedmiotu

  1. SELECT u.imię, u.nazwisko, p.przedmiot, o.ocena FROM uczniowie u LEFT JOIN przedmioty p LEFT JOIN oceny o WHERE u.id=o.id_ucznia, p.id=id_przedmiotu
mortus
Chyba jednak złączenia tworzy się nieco inaczej:
  1. SELECT u.imię, u.nazwisko, p.przedmiot, o.ocena FROM uczniowie u LEFT JOIN oceny o ON o.id_ucznia = u.id LEFT JOIN przedmioty p ON p.id=o.id_przedmiotu;

Po co tutaj klauzula WHERE, z którą użycie złączeń (JOIN) nie ma nic wspólnego? Zresztą sami zobaczcie.
Maniek1313
Już zmieniłem ale wyskakuje taki błąd

#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'WHERE u.id=o.id_ucznia, p.id=id_przedmiotu LIMIT 0, 30' at line 1


//////////////////////////////////////

Dzięki mortus działa

Dlaczego jak wrzuciłem do kodu php zapytanie to wyskakuje błąd że jest złe zapytanie

  1. <?php
  2. $bazadanych = mysql_connect(TUTAJ LOGIN I HASŁO DO MYSQL)
  3. or die("Nie można się połączyć z bazą danych");
  4. mysql_select_db("testowanie")
  5. or die("Nie ma takiej bazy danych");
  6. $query = "SELECT u.imię, u.nazwisko, p.przedmiot, o.ocena FROM uczniowie u LEFT JOIN oceny o ON o.id_ucznia = u.id LEFT JOIN przedmioty p ON p.id=o.id_przedmiotu LIMIT 0, 30 ";
  7. $result = mysql_query($query)
  8. or die("Nie prawidłowe zapytanie sql");
  9. while ($row = mysql_fetch_array($result)) {
  10. echo $row['imię'].' '.$row['nazwisko'].' '.$row['przedmiot'].' '.$row['ocena'];
  11. }
  12. mysql_close($bazadanych)
  13. or die("Nie mogę rozłączyć się z bazą danych");
  14. ?>
mortus
Jaki błąd się pojawia. W die() zamiast łańcucha "Nieprawidłowe zapytanie sql" użyj funkcji mysql_error():
  1. $result = mysql_query($query) or die(mysql_error());
Maniek1313
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '�, u.nazwisko, p.przedmiot, o.ocena FROM uczniowie u LEFT JOIN oceny o ON o.id' at line 1
mortus
Polski znak w zapytaniu (tzn. nazwie bazy danych, kolumny, własnej funkcji, itp.) nie ma prawa bytu - patrz u.imię.
De facto stąd ten znaczek z pytajnikiem w komunikacie błędu.

@DOWN: TAK
Maniek1313
czyli zamiast u.imię muszę zmienić nazwę na u.imie tak questionmark.gifquestionmark.gif
muk4
Cytat(Maniek1313 @ 11.07.2011, 11:18:19 ) *
czyli zamiast u.imię muszę zmienić nazwę na u.imie tak questionmark.gifquestionmark.gif


Tak.
Maniek1313
Mam jeszcze jeden problem gdyż nie ma polskich znaków w wczytanych na stronę rekordach.
mortus
Temat na tym forum pojawia się bardzo często (przynajmniej ostatnimi czasy):
  1. $connection = mysql_connect();
  2. mysql_query("SET NAMES 'charset_name'");

gdzie charset_name to odpowiednie kodowanie znaków, które musi być wszędzie (w pliku, na wygenerowanej stronie, w bazie danych) jednakowe.
Maniek1313
Dałem tak ale dalej nie ma polskich znaków

  1. <?php
  2. $bazadanych = mysql_connect(LOGIN I HASŁO DO MYSQL)
  3. or die("Nie można się połączyć z bazą danych");
  4. mysql_select_db("testowanie")
  5. or die("Nie ma takiej bazy danych");
  6. $query = "SELECT u.imie, u.nazwisko, p.przedmiot, o.ocena FROM uczniowie u LEFT JOIN oceny o ON o.id_ucznia = u.id LEFT JOIN przedmioty p ON p.id=o.id_przedmiotu;";
  7. $result = mysql_query($query)
  8. mysql_query("SET NAMES 'utf8 COLLATE utf8_general_ci'");
  9. while ($row = mysql_fetch_array($result)) {
  10. echo $row['imie'].' '.$row['nazwisko'].' '.$row['przedmiot'].' '.$row['ocena'].'<br />';
  11. }
  12. mysql_close($bazadanych)
  13. or die("Nie mogę rozłączyć się z bazą danych");
  14. ?>
mortus
Bo to zapytanie ma być użyte tylko raz, zaraz po nawiązaniu połączenia, czyli po użyciu funkcji mysql_connect().
Maniek1313
Ok dzięki działa

Mógłby mi ktoś napisać zapytanie mysql który by na raz dodał imie nazwisko przedmiot ocenę do bazy danych i odrazu połączył w jedno questionmark.gifquestionmark.gif

questionmark.gif
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.