Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [MySQL][PHP]Zapytanie, 2 tabele
kleszczoscisk
post
Post #1





Grupa: Zarejestrowani
Postów: 164
Pomógł: 3
Dołączył: 13.12.2007

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


Witam i proszę o pomoc

Mam 2 tabele w bazie MySQL:

Kod
PYTANIA
    wp_id int(11)     UNSIGNED     auto_increment         
    wp_pytanie     text     
    wp_kategoria int(2)


Kod
ODPOWIEDZI
    wo_id     int(11)         UNSIGNED     auto_increment     
    wo_pytanie     int(11)             
    wo_osoba     int(11)             
    wo_odpowiedz     text


W tabeli PYTANIA przechowywane są pytania. W tabeli ODPOWIEDZI są udzielone odpowiedzi.
Ludzie dowolnie wybierają sobie pytania i udzielają na nie odpowiedzi.
Chcę wyświetlić danej osobie (wo_osoba) wszystkie(!) pytania i jeśli udzielił jakiejś odpowiedzi - wyświetlić tę odpowiedź.
Jak skonstruować zapytanie ?
Poniższe zapytanie wyświetla mi tylko te pytania do których są przyporządkowane odpowiedzi.
  1. $zapytanie = "SELECT * FROM `pytania`
  2. JOIN `odpowiedzi` ON (pytania.wp_id = odpowiedzi.wo_pytanie)
  3. WHERE
  4. wywiad_odpowiedzi.wo_osoba = $sess_id ";

Próbuję też tak, ale nie działa tak jak powinno:
  1. $zapytanie = "SELECT * FROM `pytania`
  2. LEFT OUTER JOIN `odpowiedzi` ON (pytania.wp_id = odpowiedzi.wo_pytanie)
  3. WHERE
  4. wywiad_odpowiedzi.wo_osoba = $sess_id ";


Ten post edytował kleszczoscisk 16.11.2010, 23:02:25
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
mortus
post
Post #2





Grupa: Zarejestrowani
Postów: 2 178
Pomógł: 596
Dołączył: 25.09.2009
Skąd: Piwniczna-Zdrój

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


Zapytanie z LEFT OUTER JOIN psuje klauzula WHERE. Rozwiązanie:
  1. $zapytanie = "SELECT * FROM pytania p LEFT OUTER JOIN odpowiedzi o ON p.wp_id=o.wo_pytanie AND o.wo_osoba=$sess_id";

Jak myślisz, dlaczego zapytanie z WHERE nie działa?

@nekomata Jeśli już to tak:
  1. require_once('mysqli_connect.php');
  2. $sql1 = "SELECT * FROM pytania";
  3. $wynik1 = mysqli_query($dbc, $sql1);
  4. while($wiersz1 = mysqli_fetch_array($wynik1, MYSQLI_ASSOC)) {
  5. echo $wynik1['wp_pytanie'] . '<br>';
  6. $sql2 = "SELECT * FROM odpowiedzi WHERE wo_pytanie=$wiersz1['wp_id'] AND wo_osoba=costam";
  7. $wynik2 = mysqli_query($dbc, $sql2);
  8. // jeżeli otrzymaliśmy jakieś wiersze to je przetwarzamy
  9. // a tutaj wszystko zależy od tego, czy może być więcej niż jedna odpowiedź na dane pytanie
  10. // jeżeli nie ma wierszy, to nic nie robimy
  11. $wiersz2 = mysqli_fetch_array($sql2, MYSQLI_ASSOC);
  12. echo $wiersz2['wo_odpowiedz'] . '<br>';
  13. }
To tak mniej więcej, bo trzeba jeszcze wspomniany warunek dopisać. Jednak gołym okiem widać, że rozwiązanie to nie jest optymalne, bo drugie zapytanie wykonujemy nawet wtedy, gdy dana osoba nie udzieliła odpowiedzi na któreś pytanie.
Go to the top of the page
+Quote Post

Posty w temacie


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: 10.10.2025 - 16:26