Como ligar e exibir dados MySQL de duas tabelas diferentes?

votos
0

Eu tenho duas tabelas com o nome estatísticas e usuários

tabela de usuários possui todos os dados de usuários típicos como id, nome de usuário, senha, e-mail (colunas)
Status de mesa tem id, ataque, defesa, ostats, ouro, alimentos (colunas)

Quero exibir dados de lado essas duas tabelas de lado e ter os dados ligados através de seus IDS por exemplo,

 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

Nome de usuário é de usuários de mesa eo resto deles são de tabela Estatísticas

Então, primeiro eu quero saber como ligar e exibir os dados do mesmo ID, como nome de usuário (user_id = 1) e ostats, ataque, defesa, ouro, comida (ID = 1)

Então eu quero que eles em ordem por seus ostats (eu não tenho uma coluna chamada grau em qualquer mesa, no entanto, só não sei como criar o posto usando estatísticas gerais)

Publicado 19/09/2018 em 13:21
fonte usuário
Em outras línguas...                            


2 respostas

votos
1

Você poderia fazer algo assim (não testado)

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ção possível para classificação:

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;

Outra, horrível tentativa aparência:

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;

Aqui no código PHP, você tem que executá-lo como duas consultas para definir a variável, em seguida, executar a consulta de classificação real. Desta forma, a variável de classificação é sempre definido como 0 quando executar este. Note que eu usei diferentes nomes de tabelas e colunas, apenas para simplificar as coisas um pouco. Lembre-se de ajustar às suas necessidades específicas.

// 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); 
}

Para mim, o despejo de resultados parece com isso:

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)
Respondeu 19/09/2018 em 13:32
fonte usuário

votos
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" } }

Isso é exibido depois de usar seu código, mas como matrizes usuais começar com 0, por isso vai do Ranking 0 a Posto 9, onde, como eu tenho 10 usuários classificou aqui, eu quero-o para iniciar 0 = 1 (de 1) e, em seguida, como eco que determinado número (número de classificação) a partir desta matriz? Eu tentei echo $ranks[1];mas dá-me erro "Erro fatal: Erro Uncaught: Não é possível usar objeto do tipo mysqli_result como matriz na"

Eu tentei a maneira usual de loop while e buscar 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); }


Quando eu echo $row['rank'];ecoa IDs de jogadores (USER_ID dos usuários), a fim DESC por ver estatísticas e não as fileiras reais.

Eu tentei echo $row[1];, mas ele me dá erro de "Aviso: Undefined offset: 1 em"

Então, o que estou fazendo de errado aqui?

Presumo algo deu errado com

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

Porque essa é a única parte que eu não entendo, eu tive que substituí-las por algo?

Respondeu 21/09/2018 em 11:29
fonte usuário

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