Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

2 Stron V   1 2 >  
Reply to this topicStart new topic
> Łączenie tabel z komentarzami.
bercik809
post
Post #1





Grupa: Zarejestrowani
Postów: 17
Pomógł: 0
Dołączył: 19.06.2013
Skąd: Wrocław

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


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.
Go to the top of the page
+Quote Post
nospor
post
Post #2





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




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....
Go to the top of the page
+Quote Post
bercik809
post
Post #3





Grupa: Zarejestrowani
Postów: 17
Pomógł: 0
Dołączył: 19.06.2013
Skąd: Wrocław

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


Okej, czyli link, który mi podałeś pomoże mi zmienić duplikowanie wpisów?
Go to the top of the page
+Quote Post
nospor
post
Post #4





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




Nie, jest to link ni z gruszki ni z pietruszki wklejony do tego postu.... (IMG:style_emoticons/default/wink.gif)

Tak, jest to link o tym, jak poprawnie przetrawic takie dane jak Twoje
Go to the top of the page
+Quote Post
bercik809
post
Post #5





Grupa: Zarejestrowani
Postów: 17
Pomógł: 0
Dołączył: 19.06.2013
Skąd: Wrocław

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


Dobra, dobra :-)
Dzięki wielkie (IMG:style_emoticons/default/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?
Go to the top of the page
+Quote Post
nospor
post
Post #6





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




A co za roznica?? Zapytania będą takie same a rekordy przy pomocy PDO to chyba umiesz odebrac?
Go to the top of the page
+Quote Post
bercik809
post
Post #7





Grupa: Zarejestrowani
Postów: 17
Pomógł: 0
Dołączył: 19.06.2013
Skąd: Wrocław

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


Umiem odebrać.

Tylko nie wiem czy dobrze wszystko przemienię ze zwykłego mysqla na PDO wg. skryptu.
Go to the top of the page
+Quote Post
nospor
post
Post #8





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




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.
Go to the top of the page
+Quote Post
bercik809
post
Post #9





Grupa: Zarejestrowani
Postów: 17
Pomógł: 0
Dołączył: 19.06.2013
Skąd: Wrocław

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


A tak zapytam, istnieje jeszcze jakiś inny sposób?
Go to the top of the page
+Quote Post
Turson
post
Post #10





Grupa: Zarejestrowani
Postów: 4 291
Pomógł: 829
Dołączył: 14.02.2009
Skąd: łódź

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


To znaczy inny niż grupowanie? Nie rozumiem po co.
Go to the top of the page
+Quote Post
bercik809
post
Post #11





Grupa: Zarejestrowani
Postów: 17
Pomógł: 0
Dołączył: 19.06.2013
Skąd: Wrocław

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


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.
Go to the top of the page
+Quote Post
nospor
post
Post #12





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




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 (IMG:style_emoticons/default/wink.gif)
Go to the top of the page
+Quote Post
bercik809
post
Post #13





Grupa: Zarejestrowani
Postów: 17
Pomógł: 0
Dołączył: 19.06.2013
Skąd: Wrocław

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


Wciąż nie mogę tego zrobić, mam nadal powtórzone rekordy na głównej.
Go to the top of the page
+Quote Post
sazian
post
Post #14





Grupa: Zarejestrowani
Postów: 1 045
Pomógł: 141
Dołączył: 19.09.2006
Skąd: B-tów

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


to pokaż zapytanie które napisałeś
Go to the top of the page
+Quote Post
bercik809
post
Post #15





Grupa: Zarejestrowani
Postów: 17
Pomógł: 0
Dołączył: 19.06.2013
Skąd: Wrocław

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


  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
Go to the top of the page
+Quote Post
nospor
post
Post #16





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




Pokaz kod jak to robisz.
Go to the top of the page
+Quote Post
sazian
post
Post #17





Grupa: Zarejestrowani
Postów: 1 045
Pomógł: 141
Dołączył: 19.09.2006
Skąd: B-tów

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


ORDER BY to sortowanie, a ty masz grupować czyli GROUP BY
Go to the top of the page
+Quote Post
nospor
post
Post #18





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




@sazian nie mieszaj.... przeczytaj linka co podalem, to bedziesz wiedzial o czym mowa.
Go to the top of the page
+Quote Post
trueblue
post
Post #19





Grupa: Zarejestrowani
Postów: 6 806
Pomógł: 1828
Dołączył: 11.03.2014

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


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.
Go to the top of the page
+Quote Post
bercik809
post
Post #20





Grupa: Zarejestrowani
Postów: 17
Pomógł: 0
Dołączył: 19.06.2013
Skąd: Wrocław

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


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. )


Go to the top of the page
+Quote Post

2 Stron V   1 2 >
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: 26.08.2025 - 05:53