[PHP] Wyświetlenie kilka razy tego samego zapytania z MySQL

0

Witam, mam taki skrypt:

$db=mysql_connect($db['server'], $db['user'], $db['password'])
or die('Nieudane połączenie z bazą danych...');
mysql_select_db('testbaza')
or die('Nie udało się wybrać bazy danych...');
$sql=mysql_query('SELECT * FROM users ORDER BY name');

echo '<select tabindex=\"0\" name=\"selectpierwszy\">
<option value=\"auto\">Wybierz pozycję</option>';

while($wiersz=mysql_fetch_array($sql))
{
echo '<option value=\"'.$wiersz['id'].'\">'.$wiersz['name'].'</option>';
}

echo '</select>';


mysql_close($db);

i tutaj jest moje pytanie, a mianowicie potrzebuję wyświetlić kilka razy ten select ale z innym name, chodzi mi o to żeby pobrać raz a wyświetlić kilka, żeby nie obciążać bazy. Próbowałem to wziąć w jakąś funkcję ale i nic to nie dało. Napiszę jeszcze jedno pytanie tutaj, żeby nie pisać nowego tematu. Chcę pobrać 1 usera który ma najwięcej punktów czy takie zapytanie jest poprawne?

$sql=mysql_query('SELECT * FROM users ORDER BY punkty DESC LIMIT 1');

while($wiersz=mysql_fetch_array($sql))
{
echo $wiersz['name'];
}

Z góry dziękuję za odpowiedź.

Pozdrawiam noxwow

0
  1. Cache lokalny (w pamięci php - np tablica).
  2. Tak, ale po co pobierać cały rekord, skoro używasz tylko name?
0
  1. Próbowałem coś takiego, ale mi nie wychodzi.
$i=1;
$sql=mysql_query('SELECT * FROM zawodniczki ORDER BY name');

while($wiersz=mysql_fetch_array($sql))
{

$user_id[$i]=$wiersz['id'];
$user_name[$i]=$wiersz['name']

$i=$i+'1';

}
  1. Zapomniałem dopisać jeszcze ile ma tych punktów.
$sql=mysql_query('SELECT * FROM users ORDER BY punkty DESC LIMIT 1');

while($wiersz=mysql_fetch_array($sql))
{
echo 'Użytkownik <b>'.$wiersz['name'].'</b> posiada najwięcej punktów('.$wiersz['punkty'].')';
}

Zapomniałem jeszcze się zapytać, gdy chcę pobrać np. punkty1, punkty2 to taki sam kod mam robić czy jakoś za jednym razem pobrać i potem tylko wyświetlić?

Pozdrawiam noxwow

0
$i=1;
$sql=mysql_query('SELECT * FROM zawodniczki ORDER BY name');

while($wiersz=mysql_fetch_array($sql))
{

$user_id[$i]=$wiersz['id'];
$user_name[$i]=$wiersz['name'] //<= tu nie masz srednika

$i=$i+'1';

}

mi się nie podoba to:
$i=$i+'1';
nie lepiej dać po prostu $i++, lub jak już się upierać to $i=$i+1; bo Ty robisz konwersje niepotrzebną.

a czemu by sobie nie zrobić tak że dajesz to do jakiejś zmiennej i potem z niej korzystasz? czyli w zapytaniu

$cos .= '<option value="'.$wiersz['id'].'">'.$wiersz['name'].'</option>'.\n;

i jak chcesz z tego korzystać to po prostu echo $cos

co do 2 to po co Ci wszystko z tabeli skoro korzystasz tylko z name i punkty, lepiej napisać tak jak mówił nav:

$sql=mysql_query('SELECT name, punkty FROM users ORDER BY punkty DESC LIMIT 1');

while($wiersz=mysql_fetch_array($sql))
{
echo 'Użytkownik <b>'.$wiersz['name'].'</b> posiada najwięcej punktów('.$wiersz['punkty'].')';
}
0

Dzięki .::. [browar]
Mam jeszcze dwa pytania:

  1. Jak mam takie zapytanie:
$db=mysql_connect($db['server'], $db['user'], $db['password'])
or die('Nieudane połączenie z bazą danych...');
mysql_select_db('testbaza')
or die('Nie udało się wybrać bazy danych...');

$sql=mysql_query('SELECT punkty1 FROM users ORDER BY punkty DESC LIMIT 1');
while($wiersz=mysql_fetch_array($sql))
{
echo $wiersz['punkty1'];
}


mysql_close($db);

to jak chce zrobić ranking dla punkty 1, 2 ,3 itp. to za każdym razem mam taki kod wstawiać tylko zmieniać nazwy z $db na inną?

  1. Chciałbym jeszcze pobrać procentową wartość tych punktów, ale jak to zrobić? To jakoś z pobraniem i dodaniem wartości wszystkich punkty1, lecz mi nie wychodzi.

Pozdrawiam noxwow

0

noxwow, po co zmieniać $db? Jak używasz w różnych plikach to mija się to z celem.

Druga sprawa - nie wczytałem się za mocno, ale co do wyliczania procentu z liczby przy określonym maksimum masz wzór:

$liczba / $max * 100

Wtedy w przypadku liczby 25 na maksymalne 50 wychodzi Ci 50%.

Średnia arytmetyczna:
user image

Więc kod:

for ($n=0; $n<count($skladniki); $n++) {
  $all += $skladniki[$n];
} $srednia = $all / count($skladniki);

Matematyka ^^

0

Ja wiem jak obliczyć procent ale potrzebuję liczby 100%, bo nie wiem jak ją pobrać, mam w bazie tak:
ID |punkty1
1 |20
2 |11
3 |33
4 |3
i chcę obliczyć ile osoba o id 3 jest procentem reszty. Mam nadzieję, że teraz wiecie o co chodzi.

Pozdrawiam noxwow

0

ASC - rosnąco
DESC - malejąco

SELECT punkty1 FROM users ORDER BY punkty1 DESC LIMIT 1

Potem:

$q = mysql_fetch_row($wynik_zapytania);
$q = $q[0];

I w zmiennej $q masz 100%.

0

Ale te zapytanie zwraca największą liczbę czyli 33, a nie sumę którą potrzebuję. Bo z jednej liczby nie obliczę tego muszę mieć zsumowane wszystkie liczby z punkty1 i dopiero tą największą.

Pozdrawiam noxwow

0
SELECT punkty1 FROM users
$suma = 0;
while ($tmp = mysql_fetch_row($wynik_zapytania)) {
  $suma += $tmp[0];
}

W $suma jest suma wszystkich punktów wszystkich IDeków.

0

SELECT SUM(punkty1) as suma FROM users...

0

Dzięki pomogliście mi! [browar] teraz tylko

$db=mysql_connect($db['server'], $db['user'], $db['password'])
or die('Nieudane połączenie z bazą danych...');
mysql_select_db('testbaza')
or die('Nie udało się wybrać bazy danych...');

$sql=mysql_query('SELECT SUM(punkty1) AS SUMA FROM users');
$sql2=mysql_query('SELECT punkty1 FROM users ORDER BY punkty1 DESC LIMIT 1');

while ($tmp = mysql_fetch_row($sql)) {
  $suma = $tmp[0];
}

while ($tmp = mysql_fetch_row($sql2)) {
  $max = $tmp[0];
}


mysql_close($db);


$test = 100 / $suma * $max;
echo $test.'%';

i mam już procent.

Pozdrawiam noxwow

1 użytkowników online, w tym zalogowanych: 0, gości: 1