Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Łączenie tabel z komentarzami.
Forum PHP.pl > Forum > Bazy danych
bercik809
Witam wszystkich!

Mam spory problem, w ogóle nie mam pomysłu już jak to zrobić.

Mam dwie tabele, przyjmijmy nazwy tabela jeden oraz tabela dwa.
W tabeli jeden mam id ludzi, a w tabeli dwa mamy komentarze, które zostały dodane do danego ludzika o tym samym id.
I powiedzmy jest kilka komentarzy do jednego użytkownika, to będzie:
id komentarz
73 adasadaa
73 asdasdsad
73 asdasdasda

I wtedy wykonuje polecenie JOIN, lecz zamiast komentarze wyświetlać się pod użytkownikiem
to wyświetlają mi się duplikaty użytkowników z tabeli dwa na taką ilość ile jest komentarzy do danego użytkownika.

Jakie polecenie mam zastosować?
Ja stosowałem to:
  1. SELECT SQL_NO_CACHE * FROM tabela_informacji JOIN tabela_zmarlych ON tabela_informacji.zmarly_id = tabela_zmarlych.id;


I wtedy ma głównej stronie wychodzą mi duplikaty.

Proszę o pomoc.
nospor
No i wszystko jest prawidlowo. Jak laczysz tabele, to pierwsza tabela "powieli" sie tyle razy ile masz połączen w drugiej.

Musisz dane pogrupowac odpowiednio, a potem wyswietlac jak sobie chcesz
http://nospor.pl/grupowanie-wynikow.html

ps: po grzyba w opisie wymyslasz nam, jak to jedna tabela sie nazywa JEDEN a druga DWA, podczas gdy w zapytaniu i tak uzywasz prawdziwych nazw....
bercik809
Okej, czyli link, który mi podałeś pomoże mi zmienić duplikowanie wpisów?
nospor
Nie, jest to link ni z gruszki ni z pietruszki wklejony do tego postu.... wink.gif

Tak, jest to link o tym, jak poprawnie przetrawic takie dane jak Twoje
bercik809
Dobra, dobra :-)
Dzięki wielkie smile.gif

Kurda, ten przykład jest w zwykłym mysqlu. A ja tworzyłem wszystko w PDO, nie masz jeszcze czegoś ale z PDO?
nospor
A co za roznica?? Zapytania będą takie same a rekordy przy pomocy PDO to chyba umiesz odebrac?
bercik809
Umiem odebrać.

Tylko nie wiem czy dobrze wszystko przemienię ze zwykłego mysqla na PDO wg. skryptu.
nospor
Cytat
Tylko nie wiem czy dobrze wszystko przemienię ze zwykłego mysqla na PDO wg. skryptu.
Dopoki nie zrobisz to sie nie dowiemy.

Ale skoro wszystko masz w PDO, jak sam napisales, to takie podstawy jak odebranie danych z bazy w PDO powinienies umiec zrobic z zamknietymy oczami.
bercik809
A tak zapytam, istnieje jeszcze jakiś inny sposób?
Turson
To znaczy inny niż grupowanie? Nie rozumiem po co.
bercik809
Dokładnie inny, niż grupowanie. I tak pewnie zrobię tym, lecz jestem ciekawy czy istnieje tylko ten jeden sposób czy jest ich X liczba.
nospor
Z jakiej strony bys nie patrzyl, musi byc grupowanie. Takie czy siakie czy jeszcze inne, ale musi byc grupowanie. Moze byc robione na zywo, moze byc robione jak to pokazalem, ale tak czy siak musi byc grupowanie

ps: a nie, przepraszam, moze byc bez grupowania. Mozesz najpierw pobrać glowna tabele, a potem po kolei dla kazdego rekordu pobierac komentarze. Ale to jest tak bezsensowne i nieoptymalne, ze az sie wstydze ze o tym wspomnialem wink.gif
bercik809
Wciąż nie mogę tego zrobić, mam nadal powtórzone rekordy na głównej.
sazian
to pokaż zapytanie które napisałeś
bercik809
  1. SELECT SQL_NO_CACHE * FROM tabela_informacji LEFT JOIN tabela_zmarlych ON tabela_informacji.zmarly_id = tabela_zmarlych.id ORDER BY tabela_zmarlych.id DESC LIMIT 16
nospor
Pokaz kod jak to robisz.
sazian
ORDER BY to sortowanie, a ty masz grupować czyli GROUP BY
nospor
@sazian nie mieszaj.... przeczytaj linka co podalem, to bedziesz wiedzial o czym mowa.
trueblue
Cytat(bercik809 @ 23.06.2014, 13:23:51 ) *
I wtedy wykonuje polecenie JOIN, lecz zamiast komentarze wyświetlać się pod użytkownikiem
to wyświetlają mi się duplikaty użytkowników z tabeli dwa na taką ilość ile jest komentarzy do danego użytkownika.

Możesz to potwierdzić/sprecyzować? Mam wrażenie, że chcesz osiągnąć inny efekt od rozwiązania proponowanego przez użytkowników.
bercik809
Trochę długo nie odpowiadałem, ale już opisuje wszystko.

A mianowicie, wpisy już się nie duplikują. Lecz, są jeszcze takie światełka, które duplikują się tyle razy ile wystąpi komentarz do danego wpisu.
Wklejam pomoc:

  1. $this->stmt=$this->pdo->query('SELECT SQL_NO_CACHE * FROM tabela_zmarlych LEFT JOIN tabela_informacji ON tabela_informacji.zmarly_id = tabela_zmarlych.id WHERE tabela_zmarlych.id < '.($this->upo->rowCount() + 1).' and tabela_zmarlych.id > '.($this->upo->rowCount() - 17).' ORDER BY tabela_zmarlych.id DESC');
  2. $osoba = array();
  3. while($this->row = $this->stmt->fetch(PDO::FETCH_ASSOC)){
  4. //$_SESSION['id_zmarly'] = $this->row['id'];
  5. if(empty($this->row['imie_nadane'])){
  6. $daneOsoboweGlowne = $this->row['imie'].' '.$this->row['nazwisko'].', '.$this->row['pseudonim'].', '.$this->row['spoczywa_miejscowosc'];
  7. $swieczki = $this->row['ilosc_swieczek'];
  8. }else{
  9. $daneOsoboweGlowne = $this->row['imie'].' '.$this->row['nazwisko'].', '.$this->row['pseudonim'].', '.$this->row['spoczywa_miejscowosc'].', '.$this->row['imie_nadane'];
  10. }
  11. $swiatla = $this->row['ilosc_swieczek'];
  12. $drzewo = $this->row['drzewo'];
  13. $comment = $this->row['zmarly_id'].' '.$this->row['tresc_zdarzenia'];
  14. $osoba[$daneOsoboweGlowne][] = array('tresc_komentarza' => $comment, 'swiatelka' => $swiatla);
  15. }
  16.  
  17.  
  18.  
  19. echo '<ul id="listaAktualna">';
  20. foreach($osoba as $person => $_komentarz){
  21. echo '<li>'.$person.'</li>';
  22.  
  23. echo '<div id="infoList">';
  24. echo '<ul id="lights">';
  25. foreach($_komentarz as $lampka){
  26. for($i=0;$i<$lampka['swiatelka'];$i++){
  27. echo '<li><img src="public/img/swiatlo.png" alt="swiatelko"/></li>';
  28. }
  29. echo '<span>('.$lampka['swiatelka'].') światełka</span>';
  30. }
  31. if($drzewo == 0){
  32. echo '<p>Nie jest w drzewie genealogicznym.</p>';
  33. }else{
  34. echo '<p>Jest w drzewie genealogicznym.</p>';
  35. }
  36. echo '</ul>';
  37.  
  38. echo '<p class="showMore">Rozwiń ˅</p>';
  39. echo '<ul id="dane">'.'<li>Imię: '.$imie.'</li>';
  40.  
  41. foreach($_komentarz as $coment){
  42. echo '<li>'.$coment['tresc_komentarza'].'</li>';
  43. }
  44.  
  45. echo '</ul></div>';
  46.  
  47. }
  48. echo '</ul>';


Tak to wszystko wygląda.

  1. (
  2. [tresc_komentarza] => 84 sdfsdfsdf
  3. [swiatelka] => 3
  4. )
  5. (
  6. [tresc_komentarza] =>
  7. [swiatelka] => 21
  8. )
  9. (
  10. [tresc_komentarza] => 82 asdqwwtret stary
  11. [swiatelka] => 2
  12. )
  13. (
  14. [tresc_komentarza] => 81 dsaaaaaaaaaaaaaaaaaaaaa
  15. [swiatelka] => 20
  16. )
  17. (
  18. [tresc_komentarza] => 81 dsaaaaaaaaaaaaaaaaaaaaa
  19. [swiatelka] => 20
  20. )
  21. (
  22. [tresc_komentarza] => 81 Spoczywaj w pokoju.
  23. [swiatelka] => 20
  24. )
  25. (
  26. [tresc_komentarza] =>
  27. [swiatelka] => 20
  28. )
  29. (
  30. [tresc_komentarza] =>
  31. [swiatelka] => 20
  32. )
  33. (
  34. [tresc_komentarza] => 78
  35. [swiatelka] => 20
  36. )
  37. (
  38. [tresc_komentarza] => 77
  39. [swiatelka] => 50
  40. )
  41. (
  42. [tresc_komentarza] => 76 qqqqqqqqqqqqqqqqqqqqq
  43. [swiatelka] => 0
  44. )
  45. (
  46. [tresc_komentarza] => 76
  47. [swiatelka] => 0
  48. )
  49. (
  50. [tresc_komentarza] => 76
  51. [swiatelka] => 0
  52. )
  53. (
  54. [tresc_komentarza] => 76
  55. [swiatelka] => 0
  56. )
  57. (
  58. [tresc_komentarza] => 75
  59. [swiatelka] => 11
  60. )
  61. (
  62. [tresc_komentarza] => 75
  63. [swiatelka] => 11
  64. )
  65. (
  66. [tresc_komentarza] => 74
  67. [swiatelka] => 0
  68. )
  69. (
  70. [tresc_komentarza] => 74
  71. [swiatelka] => 0
  72. )
  73. (
  74. [tresc_komentarza] => 73 xxxxxxxxxxxxxxxxxxxxx
  75. [swiatelka] => 25
  76. )
  77. (
  78. [tresc_komentarza] => 73 xxxxxxxxxxxxxxxxxxxxx
  79. [swiatelka] => 25
  80. )
  81. (
  82. [tresc_komentarza] => 73 xxxxxxxxxxxxxxxxxxxxx
  83. [swiatelka] => 25
  84. )
  85. (
  86. [tresc_komentarza] => 73 xxxxxxxxxxxxxxxxxxxxx
  87. [swiatelka] => 25
  88. )
  89. (
  90. [tresc_komentarza] => 73 xxxxxxxxxxxxxxxxxxxxx
  91. [swiatelka] => 25
  92. )
  93. (
  94. [tresc_komentarza] => 73 xxxxxxxxxxxxxxxxxxxxx
  95. [swiatelka] => 25
  96. )
  97. (
  98. [tresc_komentarza] => 73 xxxxxxxxxxxxxxxxxxxxx
  99. [swiatelka] => 25
  100. )
  101. (
  102. [tresc_komentarza] => 73 xxxxxxxxxxxxxxxxxxxxx
  103. [swiatelka] => 25
  104. )
  105. (
  106. [tresc_komentarza] => 73 xxxxxxxxxxxxxxxxxxxxx
  107. [swiatelka] => 25
  108. )
  109. (
  110. [tresc_komentarza] => 73 xxxxxxxxxxxxxxxxxxxxx
  111. [swiatelka] => 25
  112. )
  113. (
  114. [tresc_komentarza] => 73 xxxxxxxxxxxxxxxxxxxxx
  115. [swiatelka] => 25
  116. )
  117. (
  118. [tresc_komentarza] => 73 xxxxxxxxxxxxxxxxxxxxx
  119. [swiatelka] => 25
  120. )
  121. (
  122. [tresc_komentarza] => 73 xxxxxxxxxxxxxxxxxxxxx
  123. [swiatelka] => 25
  124. )
  125. (
  126. [tresc_komentarza] => 73 xxxxxxxxxxxxxxxxxxxxx
  127. [swiatelka] => 25
  128. )
  129. (
  130. [tresc_komentarza] => 73 xxxxxxxxxxxxxxxxxxxxx
  131. [swiatelka] => 25
  132. )
  133. (
  134. [tresc_komentarza] => 73 xxxxxxxxxxxxxxxxxxxxx
  135. [swiatelka] => 25
  136. )
  137. (
  138. [tresc_komentarza] => 73 xxxxxxxxxxxxxxxxxxxxx
  139. [swiatelka] => 25
  140. )
  141. (
  142. [tresc_komentarza] => 73 asddasdasdafgfdhfonfar
  143. [swiatelka] => 25
  144. )
  145. (
  146. [tresc_komentarza] => 73 xxxxxxxxxxxxxxxxxxxxx
  147. [swiatelka] => 25
  148. )
  149. (
  150. [tresc_komentarza] => 73 xxxxxxxxxxxxxxxxxxxxx
  151. [swiatelka] => 25
  152. )
  153. (
  154. [tresc_komentarza] => 73 xxxxxxxxxxxxxxxxxxxxx
  155. [swiatelka] => 25
  156. )
  157. (
  158. [tresc_komentarza] => 73 xxxxxxxxxxxxxxxxxxxxx - Dla przykadłu kilka razy komentarz do wpisu o id 73 duplikuje mi kilka tyle samo razy światełka.
  159. [swiatelka] => 25
  160. )
  161. (
  162. [tresc_komentarza] =>
  163. [swiatelka] => 1
  164. )
  165. (
  166. [tresc_komentarza] =>
  167. [swiatelka] => 19
  168. )
  169. (
  170. [tresc_komentarza] =>
  171. [swiatelka] => 41
  172. )
  173. (
  174. [tresc_komentarza] =>
  175. [swiatelka] => 0
  176. )
  177. (
  178. [tresc_komentarza] =>
  179. [swiatelka] => 0
  180. )


nospor
Musze juz leciec, ale na szybko widze, ze chyba nie do konca zrozumiales sposobu, ktory opisalem w arcie. Przeanalizuj to jeszcze raz, bo wydaje mi sie, ze zrobiles to źle. Albo ja nie rozumiem tego jak to zrobiles. Tak czy siak musze juz leciec.
bercik809
Czy ktoś będzie w stanie mi pomóc?

Do zamknięcia, udało się.
Miałeś rację nospor, zajrzałem jeszcze raz do Twojego artykułu i rzeczywiście - nie zrozumiałem wszystkiego.
Ale już się połapałem.
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.