Bazy danych SQL - wyciaganie danych a sortowanie
pierzu - 16-10-2007, 11:03 Temat postu: wyciaganie danych a sortowanie hmm nie mam pomyslu jak zrobic pewna rzecz, chodzi mi o wyciagniecie z jednej tabeli id uzytkownikow ktorzy spelniaja jeden warunek (naleza do grupy o id 3), nastepnie wyciagnac kilka pol z danymi uzytkownikow z innej tabeli (sa to dodatkowe pola zrobione przeze mnie) posiadajacych id ktore wczesniej wyciagnalem oraz posortowac wg pola (sa to tabele forum opartym na phpbb by przemo).
jak narazie robie to tak:
1. wypisuje to tablicy id uzytkownikow ktorzy spelniaja warunek (ktorzy naleza do grupy)
2. wyciagam z bazy danych i wypisuje na stronie dane uzytkownikow z id ktore mam w tablicy
tylko pytanie jak to posortowac wg jednego pola?
nie wiem moze nie potrafie sie skupic, ostatnio mam z tym problem
podam przyklady kodu:
1.
Kod: | $wybierz = "SELECT `user_id` FROM `phpbb_user_group` WHERE `group_id`=3";
$zapytanie = mysql_query($wybierz);
$i=0;
$id_uzytk=array();
while ($wiersz = mysql_fetch_row($zapytanie))
{
$id_uzytk[$i]=$wiersz[0];
$i++;
} |
2.
Kod: | for($i=0; $i < count($id_uzytk); $i++)
{
$wybierz = "SELECT `user_field_1`, `user_field_2`, `user_field_5`, `user_field_4` FROM `phpbb_users` WHERE `user_id`='".$id_uzytk[$i]."'";
$zapytanie = mysql_query($wybierz);
$wiersz = mysql_fetch_row($zapytanie);
$num=$i+1;
if($wiersz[3]<0) { $wiersz[3]=0; }
echo '<tr><td>'.$num.'</td><td>'.$wiersz[0].'</td><td>'.$wiersz[1].'</td><td>'.$wiersz[2].'</td><td>'.$wiersz[3].'</td></tr>';
} |
Centurion - 16-10-2007, 11:12
Do sortowania wyników służy "ORDER BY klucz ASC/DESC"
np
Kod: | $wybierz = "SELECT `user_field_1`, `user_field_2`, `user_field_5`, `user_field_4` FROM `phpbb_users` WHERE `user_id`='".$id_uzytk[$i]."' ORDER BY user_field_1 DESC"; |
pierzu - 16-10-2007, 11:16
Cytat: | Do sortowania wyników służy "ORDER BY klucz ASC/DESC" |
to ja wiem, ale to mi nic nie posortwuje bo wyciagam dane kazdego uzytkownika oddzielnie, przeanalizuj moj kod
Centurion - 16-10-2007, 13:20
no tak, myśle że powinieneś spróbować wydobyć wszystko co chcesz jednym zapytaniem a nie dwoma
Kod: | $sql = "SELECT ug.group_id
FROM (" . USER_GROUP_TABLE . " ug, " . GROUPS_TABLE . " g)
WHERE ug.user_id = " . $user_id . "
AND g.group_id = ug.group_id
AND g.group_single_user = 0
AND ug.user_pending <> 1
ORDER BY g.group_order ASC"; |
to jest fragment z includes/usercp_viewprofile.php
trzeba go tylko przerobić na coś mniej więcej takiego:
Kod: | $sql = "SELECT u.user_field_1, u.user_field_2, u.user_field_5, u.user_field_4, u.username
FROM (" . USERS_TABLE . " u, " . USER_GROUP_TABLE . " ug, " . GROUPS_TABLE . " g)
WHERE g.group_id = ID_GRUPY
AND g.group_id = ug.group_id
AND g.group_single_user = 0
AND u.user_id = ug.user_id
AND ug.user_pending <> 1
ORDER BY u.user_field_1 ASC"; |
Nie sprawdzałem czy to działa ale będziesz miał przynajmniej punkt zaczepienia
|
|
|