Jump to content

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


Sëths

Mensajes recomendados

[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!

Enlace para comentar
Compartir en otros sitios

<?php

require 'config.inc.php';

$yang=mysqli_query($conect,"SELECT SUM(gold) AS gold FROM player.player");


?>

Si miramo s mas arriba, vemos que pusistes:

<?php
$_CONNECTION = array (
'dbname' => 'account', //Nombre de la base de datos (dejar account)
'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 = mysqli_connect($_CONNECTION['dbhost'],$_CONNECTION['dbuser'],$_CONNECTION['dbpass'],$_CONNECTION['dbname']);

Aqui estás haciendo una conexion a la base de datos account y arriba conectas con player (no se si esto dará error dado que yo nunca lo hago asi)

 

Pero para evitar problemas puedes quitar la base de datos de la conexion

$conect = new mysqli($_CONNECTION['dbhost'],$_CONNECTION['dbuser'],$_CONNECTION['dbpass']);

Puedes usar new mysqli (que puedes ver errores o mysqli_connect que no puedes ver errores)

 

Debes iniciar sesión para ver el contenido del enlace en esta publicación.

 

Un saludo.

Enlace para comentar
Compartir en otros sitios

Unirse a la conversación

Puedes publicar ahora y registrarte más tarde. Si tienes una cuenta, regístrate para publicar con su cuenta.

Guest
Responder a este tema...

×   Has pegado contenido con formato .   Eliminar formato

  Only 75 emoji are allowed.

×   Tu enlace se ha incorporado automáticamente.   Mostrar un enlace en su lugar

×   Se ha restaurado el contenido anterior. .   Borrar editor

×   You cannot paste images directly. Upload or insert images from URL.

  • Recientemente navegando por este tema   0 miembros

    • No hay usuarios registrados visitando esta página.
×
×
  • Crear nuevo...