Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Jedno zapytanie dla "jeden do wielu"
snapshot
post
Post #1





Grupa: Zarejestrowani
Postów: 96
Pomógł: 6
Dołączył: 22.08.2007
Skąd: Wrocław

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


Mam tabele:

ankieta (id, pytanie)

odpowiedzi (id, idAnkieta, Odpowiedź)

Czy da się jakoś wyciągnąć jednym zapytaniem pytanie i odpowiedzi znając id ankiety? Można to zrobić wyciągają wszystkie opowiedzi dla idAnkiety i joinem połączyć z ankietą, ale wtedy każdy wiersz będzie miał pytanie. Da się to zrobić poprawniej?

Podobny problem mam z postami na forum. Wyciągam sobie wszystkie posty, dodatkowo każdy post może zostać pochwalony. O ile wyciągnięcie ilości pochwał dla danego postu nie sprawia mi trudności (count()), to wyciągnięcie postów i osób dla każdej wiadomości, które ją pochwaliły pochwaliły, sprawia mi problem.


--------------------
ZF developer
Go to the top of the page
+Quote Post
seth-kk
post
Post #2





Grupa: Zarejestrowani
Postów: 444
Pomógł: 79
Dołączył: 26.05.2009

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


Cytat(snapshot @ 28.05.2009, 19:07:50 ) *
Czy da się jakoś wyciągnąć jednym zapytaniem pytanie i odpowiedzi znając id ankiety? Można to zrobić wyciągają wszystkie opowiedzi dla idAnkiety i joinem połączyć z ankietą, ale wtedy każdy wiersz będzie miał pytanie. Da się to zrobić poprawniej?

a co w tym niepoprawnego?
w alternatywie masz UNION i oddzielne zapytania


--------------------
Go to the top of the page
+Quote Post
snapshot
post
Post #3





Grupa: Zarejestrowani
Postów: 96
Pomógł: 6
Dołączył: 22.08.2007
Skąd: Wrocław

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


Niechodzi że nie poprawnie. Pytam się czy da się może lepiej. A co z drugim problemem?


--------------------
ZF developer
Go to the top of the page
+Quote Post
seth-kk
post
Post #4





Grupa: Zarejestrowani
Postów: 444
Pomógł: 79
Dołączył: 26.05.2009

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


pewnie tez join tylko na wiekszej liczbie tabel
bez ich budowy ciezko powiedziec jak bedzie wygladal


--------------------
Go to the top of the page
+Quote Post
snapshot
post
Post #5





Grupa: Zarejestrowani
Postów: 96
Pomógł: 6
Dołączył: 22.08.2007
Skąd: Wrocław

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


W uproszczeniu:

Posts (idPost ...),
Users (idUser , idCountry...),
Countries (idCountry ...)
Reputations (idPost, idUser)


Aktualnie mam takie zapytanie

  1. SELECT `p`.*, COUNT(r.idPost) AS `reputation`, `u`.`login`, `c`.`code` AS `countryCode`, `c`.`name` AS `countryName`
  2. FROM `posts` AS `p`
  3. LEFT JOIN `reputations` AS `r` ON p.idPost = r.idPost
  4. INNER JOIN `users` AS `u` ON p.idUser = u.idUser
  5. LEFT JOIN `countries` AS `c` ON u.userCountry = c.idCountry
  6. WHERE (p.idTopic = '21')
  7. GROUP BY `p`.`idPost`


I zwraca ono posty z danego tematu, punkty reputacji dla danego postu, z userami i krajami z jakich pochodzą. Chcę żeby dodatkowo można było wyciągnąć loginy osób które dały punkty reputacji za wiadomość.


--------------------
ZF developer
Go to the top of the page
+Quote Post
DK.log
post
Post #6





Grupa: Zarejestrowani
Postów: 14
Pomógł: 0
Dołączył: 27.05.2009

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


Nie neguje innych rozwiązań, ale ja spróbowałbym dość prostym i sprawdzonym już przeze mnie sposobem:
  1. <?php
  2. print "<table>";
  3. $wynik_ank = mysql_query ("SELECT * FROM ankieta") or die ("bład w pytaniu");
  4.  
  5. while ($rekord = mysql_fetch_assoc ($wynik_ank)) {
  6.   $id = $rekord['id'];
  7.   $pytanie = $rekord['pytanie'];
  8.   print "<tr><td>$$pytanie</td>";
  9.   print "<td>";
  10.   $wynik_odp = mysql_query ("SELECT * FROM odpowiedzi WHERE idAnkieta LIKE '$id' ") or die ("bład w pytaniu");
  11.    while ($rek = mysql_fetch_assoc ($wynik_odp)) {
  12.    $id_odp = $rek['id'];
  13.        $odpowiedz =  $rek['Odpowiedź'];
  14.        print "Odp nr $id_odp: $odpowiedz"</br>;
  15.        }
  16.   print "</td></tr>";
  17.   }
  18. print "</table>";
  19. ?>


Ten post edytował DK.log 28.05.2009, 23:49:00
Go to the top of the page
+Quote Post
nexis
post
Post #7





Grupa: Zarejestrowani
Postów: 1 012
Pomógł: 109
Dołączył: 26.09.2003
Skąd: nexis.pl

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


Cytat(snapshot @ 28.05.2009, 19:07:50 ) *
Czy da się jakoś wyciągnąć jednym zapytaniem pytanie i odpowiedzi znając id ankiety? Można to zrobić wyciągają wszystkie opowiedzi dla idAnkiety i joinem połączyć z ankietą, ale wtedy każdy wiersz będzie miał pytanie. Da się to zrobić poprawniej?

Tak jest właśnie poprawnie, a jeżeli chcesz to rozdzielić to jak najbardziej poprawnie będzie zastosowanie dwóch zapytań. Czemu się przed tym bronisz?


--------------------
Zend Certified Engineer

Kliknij POMÓGŁ jeśli moja odpowiedź okazała się użyteczna!
Go to the top of the page
+Quote Post
snapshot
post
Post #8





Grupa: Zarejestrowani
Postów: 96
Pomógł: 6
Dołączył: 22.08.2007
Skąd: Wrocław

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


Chodzi oto, żeby uzyskać jak najbardziej optymalne i wygodne rozwiązanie. Skoro piszecie, że dobrze myślę, to jest ok. Męczy mnie jeszcze ta reputacja...


--------------------
ZF developer
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 19.08.2025 - 18:41