Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Wyświetlenie kilku wyników z jednej tabeli dla jednego wyniku z innej
Forum PHP.pl > Forum > PHP
spit
Trochę tytuł niewyraźny, ale nie wiem jak lepiej to opisać smile.gif

Piszę teraz taki wakacyjny projekcik, ogólnie chcę wyświetlić swoje zbiory starych gier na PC. Teoretycznie to jest do zrobienia w html w sekundę, ale chcę się pobawić php winksmiley.jpg Zamiast tłumaczenia pokażę moje zapytanie (naturalnie testowe, żeby ogarnąć kod, to nie jest żaden final):
  1. SELECT *
  2. FROM games
  3.  
  4. JOIN developers_games ON games_id = developers_games_gameid
  5. JOIN developers ON developers_games_devid = developers_id
  6.  
  7. JOIN genres_games ON games_id = genres_games_gameid
  8. JOIN genres ON genres_games_genreid = genres_id
  9.  
  10. JOIN publishers_games ON games_id = publishers_games_gameid
  11. JOIN publishers ON publishers_games_pubid = publishers_id
  12.  
  13. WHERE games_id = 1
  14. GROUP BY games_id

I mam problem. Z grupowaniem wyświetla się jeden wynik, ale ja mam przypisanych kilka gatunków. Na przykład dla gry "Road Rage" to będzie "akcja", "motory" i "wyścigi". Ale w tej chwili pokazuje mi się tylko jeden. Co zrobić, żeby pokazywały się wszystkie?

Wywołuję całość tak (oparte o ADOdb Lite):
  1. echo ' <ul>
  2. <li>Tytul: <a href="/games,id,'.$result->fields['games_id'].',n,'.$result->fields['games_slug'].'">'.$result->fields['games_name'].'</a></li>
  3. <li>Developer: <a href="/developers,id,'.$result->fields['developers_id'].'">'.$result->fields['developers_name'].'</a></li>
  4. <li>Wydawca: <a href="/publishers,id,'.$result->fields['publishers_id'].'">'.$result->fields['publishers_name'].'</a></li>
  5. <li>Gatunek: <a href="/genres,id,'.$result->fields['genres_id'].'">'.$result->fields['genres_name'].'</a></li>
  6. <li>Opis: '; ?><? if ($result->fields['games_desc'] == NULL) { echo 'Brak opisu'; } else { echo $result->fields['games_desc'].'</li>'; } ?>
  7. <? echo '
  8. </ul>';
wookieb
Try
  1. GROUP BY games_id, genres_games_genreid
spit
Dzięki, ale teraz dublują się cała zawartość pętli (wywołuję to w while'u). Bez pętli jest tak, jak było.
wookieb
A to widzisz źle skumałem
  1. SELECT * , GROUP_CONCAT(genres_name ORDER BY genres_name ASC) AS all_genres
  2. FROM games
  3.  
  4. JOIN developers_games ON games_id = developers_games_gameid
  5. JOIN developers ON developers_games_devid = developers_id
  6.  
  7. JOIN genres_games ON games_id = genres_games_gameid
  8. JOIN genres ON genres_games_genreid = genres_id
  9.  
  10. JOIN publishers_games ON games_id = publishers_games_gameid
  11. JOIN publishers ON publishers_games_pubid = publishers_id
  12.  
  13. WHERE games_id = 1
  14. GROUP BY games_id


Wynik masz w all_genres oddzielone przecinkiem
spit
Dzięki, prawie gra, ale wyświetla się podwójnie (w sensie gatunki) winksmiley.jpg Aha, i jak zrobić z tych wpisów (gatunków) linki? Probówałem
Kod
SELECT *, GROUP_CONCAT(' <a href=\"genres_id\">',genres_name,'</a>' ORDER BY genres_name ASC) as all_genres
ale wtedy nie bierze mi wartości, tylko drukuje samo genres_id.
wookieb
  1. GROUP_CONCAT(DISTINCT genres_name ORDER BY genres_name ASC) AS all_genres
spit
Super, gra, dzięki wielkie smile.gif Jeszcze z tymi linkami, gdybyś mógł mnie poratować, byłbym megawdzięczny smile.gif
wookieb
  1. GROUP_CONCAT(DISTINCT genres_name ORDER BY genres_name ASC) AS all_genres,
  2. GROUP_CONCAT(DISTINCT genres_id ORDER BY genres_name ASC) AS all_genres_ids


Masz listę idków oraz listę nazw grup. Rozbijasz sobie na tablicę obydwa pola
  1. $idki = explode(',', $record['all_genres_ids']);
  2. $grupy = explode(',' $record['all_genres']);
  3.  
  4. // laczymy w jedna tablice
  5. $lista_grup = array_combine($idki, $grupy);


no i teraz standardowo foreach na $lista_grup i masz wszystko co chcesz.
spit
Dzięki wielkie, gra smile.gif

Teraz zostaje mi problem z foreach, bo chcę z tego zrobić funkcję:
  1. function Links($arr) {
  2. foreach ($arr as $k => $v) {
  3. return '<a href="'.$k.'">'.$v.'</a>';
  4. }
  5. }
Ale zwraca tylko jedną wartość. Gdy dam 'echo' zamiast 'return', zwraca wszystko, ale tam gdzie jest funkcja, nie tam gdzie ją echuję.
wookieb
Podstawy....
  1. function Links($arr) {
  2. $ret = '';
  3. foreach ($arr as $k => $v) {
  4. $ret.='<a href="'.$k.'">'.$v.'</a>';
  5. }
  6. return $ret;
  7. }
  8.  
spit
Heh, na to samo wpadłem, takie podstawy to zawsze największy problem smile.gif Niemniej dzięki wielkie za pomoc!
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.