Jump to content

Sëths

Miembro
  • Contador contenido

    3
  • Ingreso

  • Última visita

  • Días ganados

    1

Mensajes publicados por Sëths

  1. [Guía] Como hacer querys correctamente en PHP con mysqli

     
    Hoy os vengo a enseñar como hacer query en php correctamente para sacar información de vuestro servidor de Metin2. (Esta guía la actualizaré dependiendo de las dudas que tengáis y lo que queras hacer). Lo siento por cualquier errata que pueda cometer en mi ortografía pero este es mi primer post en el Foro.
     
    Indice

    • Archivo de configuración
    • Numerar filas
    • Mostrar filas
    • Filtros
    • Sumar valores de una columna

    Archivo de configuración
     
    Lo primero que vamos a hacer, es crear un archivo de configuración donde vamos a tener los datos de acceso a nuestro servidor (config.inc.php). En el, vamos a introducir el siguiente código y editaremos los valores de acceso.
     
    config.inc.php >
     

    <?php
    $_CONNECTION = array (
      'dbhost' => 'x.x.x.x', //Host del servidor (Ej. 192.168.1.100)
      'dbuser' => 'user', //Usuario de la base de datos
      'dbpass' => 'pass' //Contraseña de la base de datos
    );
    
    //Ahora la conexión de a la base de datos:
    $conect = new mysqli($_CONNECTION['dbhost'],$_CONNECTION['dbuser'],$_CONNECTION['dbpass']);
    ?>
    

     
    Ahora que ya tenemos nuestro archivo de configuración, vamos a crear una query.
     
     
    Numerar filas
     
    Vamos a crear una query para contar el numero de cuentas creadas en nuestro servidor. Como sabemos, las cuentas están ubicadas en account.account en nuestra base de datos. Para ello, vamos a introducirnos en el archivo php donde queramos que aparezca dicha información. Como ejemplo, en mi caso, vamos a ir a index.php, y vamos a introducir en siguiente código.
     
    index.php >
     

    <?php
    //incluimos nuestro archivo de configuración (excepto si ya lo hemos incluido)
    require 'config.inc.php';
    
    //Ahora vamos a crear la query y la vamos a almacenar en una variable.
    $cuentas = $conect->query("SELECT id FROM account.account")
    $num = $cuentas->num_rows;
    
    //Ahora nuestra variable '$num' contiene el número de cuentas que hay en nuestro servidor
    echo 'Hay un total de '.$num.' cuentas creadas';
    $cuentas->close();
    ?>
    

     Esta sería la forma de contar el numero de filas, si por ejemplo queremos contar el número de items que hay en circulación en el juego, seria así: "SELECT id FROM player.item".


    Mostrar filas
     
    Ahora digamos que queremos mostrar todos los nombres de los jugadores en una tabla junto a su nivel. Para ello vamos a ubicarnos en el archivo php donde queramos mostrar dicha tabla.
     
    index.php >

    <?php
    //incluimos nuestro archivo de configuración (excepto si ya lo hemos incluido)
    require 'config.inc.php';
    
    //Ahora vamos a crear la query y la vamos a almacenar en una variable.
    echo '<table>';
    $personajes = $conect->query("SELECT name,level FROM player.player");
    if($personajes->num_rows){
      while($row = $personajes->fetch_array(MYSQLI_ASSOC)){
        echo '<tr>';
          echo '<td>'.$row["name"].'</th>';
          echo '<td>'.$row["level"].'</th>';
        echo '</tr>';
      }
    }else{
      echo 'No hay ningún valor';
    }
    echo '</table>';
    $personajes->close();
    ?>
    

    Filtros
     
    Ahora que ya sabemos contar y numerar los datos, vamos a aplicar filtros a las querys para hacerlas más interesantes. Por ejemplo vamos a coger la query de mostrar filas y vamos a poner un filtro que diga que los muestre en orden según el nivel. Para ello lo editaremos añadiendo 'ORDER BY level'. Debe quedar algo así.

    $personajes = $conect->query("SELECT name,level FROM player.player ORDER BY level");
    

    Si ejecutamos esta query, nos daremos cuenta que los ordena, pero de menor a mayor. Si queremos que los ordene de mayor a menor, añadiremos 'DESC' al final.

    $personajes = $conect->query("SELECT name,level FROM player.player ORDER BY level DESC");
    

    Si tenemos muchos usuarios puede demorarse mucho la query, entonces digamos que solo queremos que muestre los 10 primeros según el nivel. Para ello añadiremos lo siguiente al final 'LIMIT 10'

    $personajes = $conect->query("SELECT name,level FROM player.player ORDER BY level DESC LIMIT 10");
    

    En la siguiente tesitura nos ocurre que solo queremos mostrar los personajes mayores del nivel 50, dejando los filtros anteriores. Para eso, solo necesitamos añadir lo siguiente 'WHERE level > 50' y nos debería quedar algo así

    $personajes = $conect->query("SELECT name,level FROM player.player WHERE level > 50 ORDER BY level DESC LIMIT 10");
    

    Ahora queremos añadir otro filtro que solo muestre los personajes que no lleven más de 1 semana sin loguearse al juego. Para ello utilizaremos la función de DATE_SUB(). Vamos a añadir el siguiente código a la query 'DATE_SUB(NOW(), INTERVAL 1 WEEK) < last_play' (Podemos modificar el intervalo sustituyendo 'WEEK' por lo que queramos. Ej: SECOND, MINUTE, HOUR, DAY, WEEK, MONTH, YEAR) Nos tiene que quedar de esta forma

    $personajes = $conect->query("SELECT name,level FROM player.player WHERE level > 50 AND DATE_SUB(NOW(), INTERVAL 1 WEEK) < last_play ORDER BY level DESC LIMIT 10");
    

    Sumar valores de una columna
     
    Para poder sumar valores de una columna en concreto, como por ejemplo: Queremos saber el yang en total que hay en nuestro servidor. Para ello, necesitaremos usar la función SUM().

    <?php
    //incluimos nuestro archivo de configuración (excepto si ya lo hemos incluido)
    require 'config.inc.php';
    
    //Ahora vamos a crear la query y la vamos a almacenar en una variable.
    $yang=$conect->query("SELECT SUM(gold) AS gold FROM player.player");
    $yang=$yang->fetch_array(MYSQLI_ASSOC);
    $yang=$yang["gold"];
    
    //Ahora nuestra variable '$yang' contiene el número de yang global que hay en nuestro servidor
    echo 'Hay un total de '.$yang.' de yang';
    ?>
    

    Esto nos sirve también para sumar, por ejemplo, el número total de minutos jugados en nuestro servidor.
     
     
    Y este sería el final de la guía. Ya sabéis que este es mi primer post y estoy abierto a sugerencias y dudas que pongáis en los comentarios.
     
    Un saludo y hasta la próxima!

×
×
  • Crear nuevo...