Sëths Publicado 25 de Julio del 2016 Reportar Compartir Publicado 25 de Julio del 2016 [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! ahynoa, Serex y werednnbs reacciono a esto 3 Citar Enlace para comentar Compartir en otros sitios Mas opciones de compartir...
SeMa™ Publicado 26 de Julio del 2016 Reportar Compartir Publicado 26 de Julio del 2016 <?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. ahynoa y Serex reacciono a esto 2 Citar Enlace para comentar Compartir en otros sitios Mas opciones de compartir...
Sëths Publicado 26 de Julio del 2016 Author Reportar Compartir Publicado 26 de Julio del 2016 Muchas gracias SeMa por tu aporte!Ahora mismo lo edito. Citar Enlace para comentar Compartir en otros sitios Mas opciones de compartir...
Serex Publicado 26 de Julio del 2016 Reportar Compartir Publicado 26 de Julio del 2016 Hacia tiempo que no se veia una buena guia elaborada por aqui, gracias por el aporte, y muy bueno! Sëths reacciono a esto 1 Citar Enlace para comentar Compartir en otros sitios Mas opciones de compartir...
PanchoElMaraca Publicado 26 de Julio del 2016 Reportar Compartir Publicado 26 de Julio del 2016 +1 zy. Citar Enlace para comentar Compartir en otros sitios Mas opciones de compartir...
Mensajes recomendados
Unirse a la conversación
Puedes publicar ahora y registrarte más tarde. Si tienes una cuenta, regístrate para publicar con su cuenta.