Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [mysql]lista z dwóch tabel
Saddam92
post
Post #1





Grupa: Zarejestrowani
Postów: 69
Pomógł: 0
Dołączył: 17.11.2006

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


Witam,
ostatnimi czasy zająłem sie optymalizacja swojej stronki www, doszedłem jednak do problemu którego nie mogę ominąć.

mam w bazie sql dwie tabele:
osoby(o_id, o_in) oraz opisy(id,opis,o_id)

w tabeli osoby przechowywane są imiona i ich identyfikatory, w tabeli opisy są opisy, ich id, oraz id imion do których pasują...

i teraz chciałbym utworzyć listę
imie - opis1,opis2,opis6
imie2 - opis3,opis5
itd..

jednak nie udaje mi się tu zejść poniżej dwóch zapytań do bazy.
macie jakieś pomysły ?
to co dotychczas wyskrobałem:
  1. <?php
  2. $sql = 'SELECT o_id, o_in FROM osoby ORDER BY o_in ASC';
  3. $result=$db->query($sql)or die($db->error);
  4.  echo '<br />';
  5. if ($result->num_rows>1) echo '<ul style="list-style:none;">';
  6. while($row=$result->fetch_assoc())
  7. {
  8. $sql= 'SELECT opis FROM opisy WHERE o_id='.$row['o_id'].' ORDER by opis ASC';
  9. $result1=$db->query($sql) or die ($db->error);
  10. echo '<li><a href="codzien.php5?m=person&id='.$row['o_id'].'">'.$row['o_in'].'</a> - ';
  11. while ($row1=$result1->fetch_assoc())
  12.  echo $row1['opis'].', ';
  13. echo '</li>';
  14. }
  15. if ($result->num_rows>1) echo '</ul>';
  16. ?>
Bardzo dziękuje za każdy pomysł na rozwiązanie tego problemu. Pozdrawiam (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 8)
mrjozo
post
Post #2





Grupa: Zarejestrowani
Postów: 142
Pomógł: 3
Dołączył: 27.06.2007

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


Spróbuj tego:

  1. <?php
  2. $sql = 'SELECT o.o_id, o.o_in, p.opis FROM osoby o INNER JOIN opisy p USING(o_id) GROUP BY o.o_id ORDER BY o_in ASC';
  3. $result=$db->query($sql)or die($db->error);
  4.  echo '<br />';
  5. if ($result->num_rows>1) echo '<ul style="list-style:none;">';
  6. while($row=$result->fetch_assoc())
  7. {
  8. echo '<li><a href="codzien.php5?m=person&id='.$row['o_id'].'">'.$row['o_in'].'</a> - ';
  9.  echo $row['opis'].', ';
  10. echo '</li>';
  11. }
  12. if ($result->num_rows>1) echo '</ul>';
  13. ?>


Ten post edytował mrjozo 6.07.2007, 19:22:17
Go to the top of the page
+Quote Post
Saddam92
post
Post #3





Grupa: Zarejestrowani
Postów: 69
Pomógł: 0
Dołączył: 17.11.2006

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


niestety, ale może nie wyjaśniłem dokładnie o co chodzi..

mianowicie do jednej osoby może być przyporządkowane kilka opisów, wyżej wymieniony skrypt wypisuje tylko pierwszy...
Go to the top of the page
+Quote Post
sticker
post
Post #4





Grupa: Zarejestrowani
Postów: 611
Pomógł: 19
Dołączył: 28.02.2005
Skąd: Wrocław

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


to oprzyj to na left joinie
Go to the top of the page
+Quote Post
flv
post
Post #5





Grupa: Zarejestrowani
Postów: 130
Pomógł: 1
Dołączył: 29.06.2007

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


Wyświetla jedno bo w tym zapytaniu jest użyte grupowanie, i left join tutaj nic nie zmieni.. Spróbuj poprzedniego zapytania bez klauzuli grupującej.

Ten post edytował flv 7.07.2007, 11:39:54
Go to the top of the page
+Quote Post
Saddam92
post
Post #6





Grupa: Zarejestrowani
Postów: 69
Pomógł: 0
Dołączył: 17.11.2006

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


bez klauzuli grupowania zwraca listę w kształcie
osoba 1 - opis 1
osoba 2 - opis 1
osoba 2 - opis 2
osoba 2 - opis 3
osoba 3 - opis 2
itd (mam nadzieje że regułę pokazałem)

zmiana na LEFT JOIN'a wyświetla dodatkowo osoby bez opisu...
a zatem to jeszcze nie to..
Go to the top of the page
+Quote Post
flv
post
Post #7





Grupa: Zarejestrowani
Postów: 130
Pomógł: 1
Dołączył: 29.06.2007

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


  1. <?php
  2. $sql = 'SELECT o.o_id, o.o_in, p.opis FROM osoby o INNER JOIN opisy p USING(o_id) ORDER BY o_in ASC';
  3. $result=$db->query($sql)or die($db->error);
  4.  
  5. while($row=$result->fetch_assoc())
  6. {
  7. $osoby[{$row['o_in']}] .= $row['opis'].', ';
  8. }
  9.  
  10. foreach($osoby as $klucz => $wartosc)
  11. {
  12. echo $klucz.' - '.$wartosc;
  13. }
  14. ?>

html'a już możesz samemu podstawić, powinno działać

Ten post edytował flv 7.07.2007, 15:17:39
Go to the top of the page
+Quote Post
mrjozo
post
Post #8





Grupa: Zarejestrowani
Postów: 142
Pomógł: 3
Dołączył: 27.06.2007

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


Podstaw to zapytanie w moim kodzie

  1. $sql = 'SELECT o.o_id, o.o_in, p.opis FROM opisy p INNER JOIN osoby o ON o.o_id=p.o_id ORDER BY o.o_in ASC';


Ten post edytował mrjozo 7.07.2007, 15:26:49
Go to the top of the page
+Quote Post
Saddam92
post
Post #9





Grupa: Zarejestrowani
Postów: 69
Pomógł: 0
Dołączył: 17.11.2006

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


genialne.. nie wpadłem na to.. Dzięki wielki flv

mrjozo - to ostatnie zapytanie działa tak samo jak te wcześniejsze... ale również wielkie dzieki.(IMG:http://forum.php.pl/style_emoticons/default/exclamation.gif) (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)

Ten post edytował Saddam92 7.07.2007, 15:31:00
Go to the top of the page
+Quote Post

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: 23.08.2025 - 19:25