Cum de a lega și de a afișa date MySQL din două tabele diferite?

voturi
0

Am două tabele numit „statistici“ și „utilizatori“

tabel de utilizatori are toate datele de utilizator tipic , cum ar fi ID - ul, numele de utilizator, parola, e - mail (coloane)
statistici de masă are identitate, atac, apărare, ostats, aur, produse alimentare (coloane)

Vreau să afișeze datele din aceste două mese una lângă alta și au datele legate prin IDS lor de exemplu,

 Rank   user_uid   ostats     attack    defense    gold 
   1    Test        10          5         5        100
   2    Test2       8           2         6        60
   3    Test3       6           5         1        40

Numele de utilizator este de „utilizatori“ de masă , iar restul sunt de la masă „statistici“

Deci , în primul rând vreau să știu cum de a lega și de a afișa datele din același cod, cum ar fi numele (user_id = 1) și ostats, atac, apărare, aur, produse alimentare (id = 1)

Apoi le-am dori în ordine de „ostats“ lor (nu am o coloană numită „rang“ în orice masă încă, pur și simplu nu știu cum să creeze rangul, folosind statistici globale)

Întrebat 19/09/2018 la 13:21
sursa de către utilizator
În alte limbi...                            


2 răspunsuri

voturi
1

Ai putea face ceva de genul (netestat)

SELECT u.username, s.overall, s.attack, s.defense, s.gold 
FROM stats s JOIN users u on s.user_uid = u.id 
ORDER BY s.overall;

Soluție posibilă pentru clasament:

set @row_number=0;
SELECT (@row_number:=@row_number+1) as rank, u.username, s.overall, s.attack, s.defense, s.gold 
FROM stats s JOIN users u on s.user_uid = u.id 
ORDER BY s.overall;

O altă încercarea Looking oribil:

set @row_number = (select count(*) from users) + 1;
select (@row_number:=@row_number-1) as rank,  u.username, s.overall from 
stats s join users u on s.user_uid = u.id order by s.overall desc;
set @row_number = 0;

Aici, în cod PHP, trebuie să-l rulați ca două interogări pentru a seta variabila, apoi executați interogarea clasament actuale. În acest fel, variabila rang este întotdeauna setat la 0 atunci când rulează acest lucru. Rețineți că am folosit diferite nume de tabele și coloane, doar pentru a simplifica lucrurile un pic. Nu uitați să se adapteze la nevoile specifice.

// connect to database
$conn = mysqli_connect("localhost", "user", "password", "database");
// this query will set a variable to 0.
$setSql = "SET @row_number = 0;";
// run the query. This will return a boolean - true or false, depending on whether or not the query ran successfully
$variableSet = mysqli_query($conn, $setSql);
// if the query ran successfully
if($variableSet){
    // setup the actual ranking query
    $statsSql = "select 
                     (@row_number:=@row_number+1) as rank,
                     u.id,
                     u.username,
                     s.overall
                 from
                     mstats s 
                 join 
                     musers u
                 on 
                     s.muser = u.id
                 order by 
                     s.overall desc;";
    $ranks = mysqli_query($conn, $statsSql);
    if(!$ranks){
        // dump error from rank query
        var_dump($conn->error); 
    } else {
        // dump results as associative array
        var_dump($ranks->fetch_all(MYSQLI_ASSOC));
    }
} else {
    // dump errors from setting variable
    var_dump($conn->error); 
}

Pentru mine, groapa de rezultate arată astfel:

array (size=3)
  0 => 
    array (size=4)
      'rank' => string '1' (length=1)
      'id' => string '2' (length=1)
      'username' => string 'Bar' (length=3)
      'overall' => string '1000' (length=4)
  1 => 
    array (size=4)
      'rank' => string '2' (length=1)
      'id' => string '6' (length=1)
      'username' => string 'Tom' (length=3)
      'overall' => string '7' (length=1)
  2 => 
    array (size=4)
      'rank' => string '3' (length=1)
      'id' => string '1' (length=1)
      'username' => string 'Foo' (length=3)
      'overall' => string '3' (length=1)
Publicat 19/09/2018 la 13:32
sursa de către utilizator

voturi
0
array(10) { [0]=> array(4) { ["rank"]=> string(1) "7" ["user_id"]=> string(1) "7" ["user_uid"]=> string(11) "Rubberguy12" ["ostats"]=> string(5) "90699" } [1]=> array(4) { ["rank"]=> string(1) "1" ["user_id"]=> string(1) "1" ["user_uid"]=> string(5) "Admin" ["ostats"]=> string(3) "351" } [2]=> array(4) { ["rank"]=> string(1) "2" ["user_id"]=> string(1) "2" ["user_uid"]=> string(13) "NotSoGodSpeed" ["ostats"]=> string(3) "330" } [3]=> array(4) { ["rank"]=> string(1) "8" ["user_id"]=> string(1) "8" ["user_uid"]=> string(3) "Ram" ["ostats"]=> string(2) "20" } [4]=> array(4) { ["rank"]=> string(1) "9" ["user_id"]=> string(1) "9" ["user_uid"]=> string(12) "TestAccount1" ["ostats"]=> string(2) "20" } [5]=> array(4) { ["rank"]=> string(2) "10" ["user_id"]=> string(2) "10" ["user_uid"]=> string(4) "Ajit" ["ostats"]=> string(2) "20" } [6]=> array(4) { ["rank"]=> string(1) "3" ["user_id"]=> string(1) "3" ["user_uid"]=> string(9) "codoriano" ["ostats"]=> string(1) "0" } [7]=> array(4) { ["rank"]=> string(1) "4" ["user_id"]=> string(1) "4" ["user_uid"]=> string(9) "Adminwsda" ["ostats"]=> string(1) "0" } [8]=> array(4) { ["rank"]=> string(1) "5" ["user_id"]=> string(1) "5" ["user_uid"]=> string(15) "NotSoGodSpeed12" ["ostats"]=> string(1) "0" } [9]=> array(4) { ["rank"]=> string(1) "6" ["user_id"]=> string(1) "6" ["user_uid"]=> string(16) "NotSoGodSpeed120" ["ostats"]=> string(1) "0" } }

Acest lucru este afișat după utilizarea unui cod , ci ca matrice de obicei începe cu 0, deci merge de la Rank 0 la Locul 9, în cazul în care după cum am 10 utilizatori clasat pe aici, vreau să încep 0 = 1 ( de la 1) și apoi cum să echo acest număr special (număr de rang) din această matrice? Am încercat , echo $ranks[1];dar dă - mi eroare „Fatal error: Eroare negestionat: Nu se poate utiliza obiect de tip mysqli_result ca matrice în“

Am încercat modul obișnuit de timp ce buclă și aducă Assoc

// this query will set a variable to 0.
$setSql = "SET @row_number = 0;";
// run the query. This will return a boolean - true or false, depending on whether or not the query ran successfully
$variableSet = mysqli_query($conn, $setSql);
// if the query ran successfully
if($variableSet){
    // setup the actual ranking query
    $statsSql = "select 
                     (@row_number:=@row_number+1) as rank,
                     u.user_id,
                     u.user_uid,
                     s.ostats
                 from
                     stats s 
                 join 
                     users u
                 on 
                     s.id = u.user_id
                 order by 
                     s.ostats desc;";
    $ranks = mysqli_query($conn, $statsSql);
    if(!$ranks){
        // dump error from rank query
        var_dump($conn->error); 
    } else {


        while ($row = mysqli_fetch_assoc($ranks)) {


       echo $row['rank'];

            echo "<br>";

        }


    }
} else {
    // dump errors from setting variable
    var_dump($conn->error); }


Când m - am echo $row['rank'];ecouri ID - ul de playere (user_id de la utilizatori) , în vederea DESC de către statisticile generale și nu a ranguri reale.

Am încercat , echo $row[1];dar dă - mi eroare de „Observații: nedefinita compensate: 1“

Deci, ce fac greșit aici?

Presupun că ceva nu a mers bine cu

"select (@row_number:=@row_number+1) as rank,"

Pentru că asta e singura parte nu am înțeles, a trebuit să înlocuiască astea cu ceva?

Publicat 21/09/2018 la 11:29
sursa de către utilizator

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more