Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Ciężki orzech do zgryzienia
Forum PHP.pl > Forum > Bazy danych > MySQL
Bourne18
WIęc tak :
Mam jedną tablice gdzie są user-y

id login
1 aaa
2 bbb
... ....

Oraz drugą o nazwie GRY

id Gracz1 Gracz2 Gracz3 Gracz4
1 aaa ||||| fff ||||| ggg ||||| bbb
1 ccc ||||| rrr ||||| zzz ||||| aaa


I teraz co potrzebuje .. Chodzi o zliczenie ile każdy gracz ktory jest w tabeli USERS wystepuje w tabeli GRY w polach (Gracz1 Gracz2 Gracz3 Gracz4) , oraz żeby wyświetliło mi 10 najcześciej występujących.

Jak probowałem :

[php:1:c0a51ebd78]<?php


$users_zapy="SELECT login FROM liga_users ";
$users_wyk=mysql_query($users_zapy);
$users_num=mysql_num_rows($users_wyk);

while ($users_row=mysql_fetch_array($users_wyk) ) {
$gracze_zapy="SELECT login ,
COUNT(login) as ile
FROM liga_mecze WHERE Gracz1 ='$users_row[login]' OR Gracz2 ='$users_row[login]' OR Gracz3 ='$users_row[login]' OR Gracz4 ='$users_row[login]'
ORDER BY ile
LIMIT 10";
$gracze_wyk=mysql_query($gracze_zapy);
$gracze_row=mysql_fetch_array($gracze_wyk);
echo "$users_row[login] ->>> $gracze_row[ile]";
}//koniec while
?>[/php:1:c0a51ebd78]

Niestety COUNT nie chce zadziałać w momencie jak wstawiam COUNT zapytanie wogóle nie działa. I co tu zrobić ?
spenalzo
Zobacz to:
[sql:1:61353470f2]SELECT COUNT(g.id) AS ile, u.login FROM gry g, users u WHERE g.gracz1=u.login OR g.gracz2=u.login OR g.gracz3=u.login OR g.gracz4=u.login GROUP BY u.id ORDER BY ile DESC LIMIT 10[/sql:1:61353470f2]
KeeKee
[php:1:2ae22bb852]<?php
$gracze_zapy="SELECT COUNT(login) as ile
FROM liga_mecze
WHERE Gracz1 ='".$users_row['login']."'
OR Gracz2 ='".$users_row['login']."'
OR Gracz3 ='".$users_row['login']."'
OR Gracz4 ='".$users_row['login']."'
ORDER BY ile LIMIT 10";
?>[/php:1:2ae22bb852]Sprawdz to.
spenalzo
A co mu to da?
Moje zapytanie (o ile sie nie rąbnąłem gdzieś tongue.gif) powinno w jednym zapytaniu wyciagnąć 10 użytkowników najczęściej występujących. Tymczasem Twój i jego sposób, jest wysoce nieefektwny, ponieważ pobiera wszystkie loginy (a jak będzie ich 1000) i dla każdego wykonuje zapytanie. Czyli zamiast jednego zapytania moze być 1001 (1000 uzytkownikow + 1 początkowe). Poza tym nie wyświetli 10 najczęściej występujących, tylko wszystkich z dodaną liczbą wystąpień.
Bourne18
Spenalzo żeby nie było błędu w moim przepisywaniu to pytam dla pewności , zapytanie powinno wyglądać tak :

[sql:1:017fa1bd8f]$users_zapy="SELECT COUNT(mecze_id) AS ile , login
FROM liga_mecze , liga_users
WHERE gracz1='login' OR gracz2='login' OR gracz3='login' OR gracz4='login'
GROUP BY uzy_id
ORDER BY ile DESC
LIMIT 10 ";[/sql:1:017fa1bd8f]

?

UZY_ID - jest primary w USERS
MECZE_ID jest primary w GRY

Tak wpisałem i nawet pętli mi nie chce zacząć

while ( $users_row=mysql_fetch_array($users_wyk) ) { .....

czyli chyba coś nie działa sad.gif
spenalzo
Nie. Powinno wyglądać tak jak napisałęm.
spenalzo
Gotowe zapytanie, sprawdź czy działa i jak działą - jak coś źle to napisz co mysql_error powiedział. smile.gif
[php:1:7d2d44f7e8]<?php
$q=mysql_query("SELECT COUNT(g.id) AS ile, u.login FROM gry g, users u WHERE g.gracz1=u.login OR g.gracz2=u.login OR g.gracz3=u.login OR g.gracz4=u.login GROUP BY u.id ORDER BY ile DESC LIMIT 10") or die(mysql_error());
while($t=mysql_fetch_array($q))
{
echo $t["login"]." - ".$t["ile"]."<br>";
}
?>[/php:1:7d2d44f7e8]
Bourne18
Spenalzo już podziękowałem na webhelp , także dodaje jedynie punkt . Dzięki once more .


Edit : Klikam na "pomógł mi" ale nie podświetla się twój post. Coś nie tak ?
spenalzo
Musisz wejśc przez http://forum.php.pl i/lunb wyłączyć na chwile firewalla :|
Bourne18
hmmm , trzeba przez alias dodać pkt , ja wchodze przez www.php.pl i nie chciało zaskoczyć , ale pkt jest.
webmaniac
Witam, tymczasem ja próbowałem kilkukrotnie przetworzyć skrypt żeby wyświetlał 10 najczęściej występujących w bazie nicków - baza: BAZA i kolumna z nickami: NICK. Baza zawiera ponad 1000000 wpisów także skrypt musiałby być szybki :-).
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.