Jump to content

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


Sëths
 Share

Recommended Posts

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

Link to comment
Share on other sites

<?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.

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

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

 Share

  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...