Mostrando entradas con la etiqueta MySQL. Mostrar todas las entradas
Mostrando entradas con la etiqueta MySQL. Mostrar todas las entradas
sábado, 11 de junio de 2011

MySQL Console & Formas de usar SQL con PHP~

Bueno, aprovechando que he estado... esclavizado prácticamente sin parar de hacer consultas, voy a ampliar esto, ahora que no tengo exámenes a los que estudiar ni similares (Tengo proyectos de RomHacking pero eso es otra cosa xD lo llevo a la vez, y ya pondré cosillas al respecto, llevo apuntando un "diario" algún tiempo ^^).

Lo mejor, será acostumbrarse a usar MySQL, nuestra base de datos, desde consola de comandos... muchos programas dan problemas a veces (como a mí me dio el MySQL Control Center... que no me dejaba insertar una base de datos que por consola sí me dejo...), y lo mejor es ahorrarnos problemas.

Para entrar en esta consola, Inicio -> Ejecutar... (si es windows7, basta con ponerlo en el cuadro de búsqueda) -> Escribimos "cmd" sin las comillas, y pulsamos Enter. Está bien, ¿Recuerdas la instalación de MySQL?, pues, tienes que introducir:
cd C:\ruta-completa-a-la-carpeta-de-mysql\bin
(en mi caso, cd "C:\Program Files\MySQL\MySQL Server 5.1\bin". Poned comillas si hay espacios de por medio.)
Ahí debemos escribir lo siguiente:
mysql -u Usuario -pContraseña
Usuario, suele ser root. Contraseña, la que hayas puesto al instalar... y no, no es un error, tiene que estar PEGADA al -p, como en... -p12345.

Y hala, ya estás dentro. Tocaría explicar bastaaantes comandos de SQL, que luego usaremos sobre todo en PHP. Pero vamos, con que recuerdas como entrar, por ahora basta, ciérralo.


Eso sí, mi filosofía es: SQL simple, PHP para complicarlo. Esto es, yo busco la simpleza en las consultas SQL, aunque enseñaré de todo tipo, hasta lo mas chungo que he tenido el placer de encontrar... aunque yo, en lo personal, prefiero que se encargue de "post-procesar" las consultas el PHP.

EJEMPLO:

Tenemos una tabla tal que así:


Id_ProductoNombre_ProductoPrecio
1Algo100
2Otra cosa225
.........

Otra, que indica los clientes que hay:

Id_ClienteNombre
1Alguien
2Otro alguien
......

Y, bueno, tenemos otra más, que indica las compras (Relaciona ambas tablas anteriores... luego lo explico en profundidad):

Id_CompraId_ClienteId_ProductoCantidad
1225
22110
............

Pues... supongamos por un momento, que queremos una lista de qué clientes (Nombres) han comprado algo, QUÉ han comprado (Nombres también), y cuanto han gastado (en TOTAL...).

Bueno... hay 2 formas de asumir esto. Una consulta a varias tablas con SQL, o consultar a una, luego, dentro de ese resultado a otra, y así hasta tener todo relacionado, con PHP.

Suena más simple hacerlo con SQL, ¿Verdad?. Bueno, la consulta sería esta:
SELECT C.Nombre, P.Nombre_Producto, (P.Precio*C2.Cantidad) AS TOTAL FROM Clientes AS C, Productos AS P, Compras_Individuales AS C2 WHERE C2.Id_Cliente=C.Id_Cliente AND C2.Id_Producto=P.Id_Producto;

Marea un poco... pero esto no es nada xD. Si hubiéramos hecho la BD de forma que en una sola compra haya varios productos asignados, habría una tabla más de por medio, y no solo esta consulta no funcionaría, sino que además habría que añadir funciones de grupo u operaciones de conjuntos incluso... (aunque esto último no estoy seguro xD pero vamos, pasanding, que ni lo he explicado aún).

Y bueno, no negaré que tiene sus ventajas currarse bastante la consulta. Esto, en PHP lo podemos mostrar así:
    $query=mysql_query("SELECT C.Nombre, P.Nombre_Producto, (P.Precio*C2.Cantidad) AS TOTAL FROM Clientes AS C, Productos AS P, Compras_Individuales AS C2 WHERE C2.Id_Cliente=C.Id_Cliente AND C2.Id_Producto=P.Id_Producto;") or die(mysql_error());
    while($data=mysql_fetch_array($query)){
        echo "<tr>";
            echo "<td>".$data['Nombre']."</td>";
            echo "<td>".$data['Nombre_Producto']."</td>";
            echo "<td>".$data['TOTAL']."</td>";
        echo "</tr>";
    }
    mysql_free_result($query);

Y punto... (Perdón por tochazos sin explicar, es para que se vean dos puntos de vista distintos... cuando explique más, ya podrás decidir cual de "los dos métodos" prefieres. Según estés más cómodo con PHP o con SQL).

Pero claro... ¿Como sería lo mismo, pero simplificando consultas(Tirando más de PHP)?... Bueno... Es algo "menos eficiente", dado que tiene que hacer más consultas, pero si en esas consultas especificamos los campos, y... bueno, seguíis mis directrices, tampoco se nota. Son consultas simplísimas, tampoco afectan apenas al rendimiento. Aquí veréis:

    $query=mysql_query("SELECT Id_Cliente, Nombre FROM Clientes"));
    while($data=mysql_fetch_array($query)){
     //Aquí tendremos todos los datos, cliente por cliente, así que
     // podemos usar eso para las siguientes consultas.
     $query2=mysql_query("SELECT Id_Producto, Nombre_Producto, Precio FROM Productos");
     while($data2=mysql_fetch_array($query2)){
      //Y aquí tendremos los productos, además del cliente actual de esa iteración.
      // Ya explicaré PHP, no es el momento xD
      $idCli=$data['Id_Cliente'];
      $idProd=$data2['Id_Producto'];
      $query3=mysql_query("SELECT Cantidad FROM Compras_Individuales WHERE Id_Cliente=$idCli AND Id_Producto=$idProd");
      while($data3=mysql_fetch_array($query3)){
       echo "<tr>";
        echo "<td>".$data['Nombre']."</td>";
        echo "<td>".$data2['Nombre_Producto']."</td>";
        $total=$data2['Precio']*$data3['Cantidad'];
        echo "<td>$total</td>";
       echo "</tr>";
      }
      mysql_free_result($query3);
     }
     mysql_free_result($query2);
    }
    mysql_free_result($query);

Parece un tochazo increible ¿verdad...?. Observad como se repiten muchas partes. Es casi todo igual, y solo se complica al manejar las variables en la última consulta. Nada más. Y porque quería ponerlo algo más claro. Os explico como va este.

Veréis, la idea es coger los datos que necesitemos para usar luego... por ejemplo. Hacemos una consulta a Clientes, y cogemos la Id y el Nombre, porque nos piden el Nombre, y la Id la necesitaremos para relacionarlos. Se guardan en variables. Hacemos la siguiente, usando esas variables para el WHERE, si es necesario (en el tocho de antes solo fue necesario en la tercera), y así constantemente. OJO: Cuantas más tablas... menos eficiente es esto. Además, yo uso un poco de cada mundo.

Es decir, aunque prefiera resolver los problemas en PHP, normalmente hago consultas complejas con SQL, para ahorrarme código... Sin embargo, hay cosas que no se me ocurren como hacerlas en SQL sin complicar en exceso la consulta, o simplemente es una consulta muy compleja en sí. Y ahí entra un poco más de PHP.

Aunque la verdad, para empezar, si no quieres complicarte la vida, con PHP, se puede casi... copypastear (con mucho cuidado, muchísimo, eso sí), cosa que "agiliza" las cosas. Aunque es una mala manía a evitar. Para algo están las funciones xD.

En fín, este post ha sido más largo de lo que tenía pensado, así que en el próximo explico como crear una base de datos, como, por ejemplo, la que he usado de ejemplo aquí. Y tambien unas consultas sencillas... algo de sintaxis de SQL.

Un saludo~
jueves, 14 de abril de 2011

Instalacion Apache + PHP + MySQL ~

Bueno, tal como dije, aquí está el tutorial para instalar y dejar funcionando este pack tan común. Antes de nada decir, que yo he hecho capturas instalando en una máquina virtual con Windows 7, pero los pasos son comunes a todo Windows.

Antes de nada, toca descargar lo necesario.

Apache: http://apache.rediris.es//httpd/binaries/win32/httpd-2.2.17-win32-x86-openssl-0.9.8o.msi
PHP: http://windows.php.net/downloads/releases/php-5.2.17-Win32-VC6-x86.msi
MySQL:
     - 32bits: http://dev.mysql.com/downloads/mirror.php?id=402098
     - 64bits: http://dev.mysql.com/downloads/mirror.php?id=402100

Y una vez bajado esto, comenzaremos con la instalación de Apache! :3

A ver, para apache, instalación típica, siguiente, acepto condiciones del contrato, siguiente, Y:


Si tenemos un dominio nuestro, propio, hay que ponerlo ahí, pero para pruebas... con localhost basta y sobra, la verdad xD.
Luego sale una ventana, elegid typical, luego elegid la ruta (y recordadla, dejad la que está por defecto si lo preferís).

Siguiente y esperar a que acabe. Apache Done! :3

Ahora, pasamos a instalar PHP. Dejamos que lo instale donde le salga de los mismos, pero (cuidado con el siguiente siguiente siguiente) luego seleccionamos apache 2.2.x module, de una lista que nos muestra.

Nos pedirá que introduzcamos la ruta de la carpeta de configuración de apache. En el caso anterior, lo instalé en la carpeta por defecto, así que queda así la cosa:


En la siguiente pantalla, activamos SOLO las extensiones que veamos necesarias (MySQL por ahora, en nuestro caso), para evitar incompatibilidades, de esta forma:


Y finalizamos la instalación.

Probamos la instalación tanto de apache como de php, añadiendo un archivo index.php en la carpeta htdocs (donde estarán los archivos públicos, los que se verán en el servidor, al entrar desde el navegador de internet... vamos, lo que es la web en sí) de la ruta de instalación de apache (C:\Program Files\Apache Software Foundation\Apache2.2\htdocs por defecto) y reiniciamos el servicio de apache (desde el icono de la barra de sistema, a la izquierda del reloj).

NOTA: Si falla al iniciar, tenemos que modificar el httpd.conf de la carpeta conf de apache,y cambiar las últimas lineas, que ponen:
#BEGIN PHP INSTALLER EDITS - REMOVE ONLY ON UNINSTALL
PHPIniDir ""
LoadModule php5_module "php5apache2_2.dll"
#END PHP INSTALLER EDITS - REMOVE ONLY ON UNINSTALL

por:

#BEGIN PHP INSTALLER EDITS - REMOVE ONLY ON UNINSTALL
PHPIniDir "C:\Program Files\PHP\"
LoadModule php5_module "C:\Program Files\PHP\php5apache2_2.dll"
#END PHP INSTALLER EDITS - REMOVE ONLY ON UNINSTALL

Donde C:\Program Files\PHP\ es la ruta donde hayáis instalado PHP.

Esto no ocurre siempre (espero, simplemente yo he tenido mala suerte xD o tal vez sea cosa de ese instalador, que tiene ese fallo puntual), puede ser otro error, si es así comenta y diré la solución a ese error (si errores habré visto... de todo, vamos).

Además, ya que modificamos el httpd.conf (y si no, modifícalo igualmente ^·^U), buscamos:

<IfModule dir_module>
    DirectoryIndex index.html
</IfModule>

y añadimos index.php tras el html, quedando...

<IfModule dir_module>
    DirectoryIndex index.html index.php
</IfModule>

Esto sirve para que, al cargar un directorio de htdocs, abra automáticamente el archivo con el nombre indicado, index.html por defecto, index.php ahora también. Pero el nombre puede ser cualquiera, todo es como prefieras.

Ahora bien, tenemos que probar si todo va bien aunque apache se haya reiniciado con éxito.

Añadimos el siguiente texto al index.php de la carpeta htdocs:

<?php
 phpinfo();
?>

Tras esto, basta con ir a nuestro navegador favorito, y en la barra de url, escribir "localhost", lo que nos llevará a nuestro index.php, con información de la instalación de php que acabamos de hacer. Good ^·^. ¿Problemas? comentad.

Ya solo nos queda instalar MySQL, que en un sistema limpio no suele dar problemas, así que... Esperemos que no os los dé.

Empezamos, siguiente, acepto contrato bla bla bla, y seleccionamos instalación Custom.
En location (os hablo por experiencia), os recomiendo poner una ruta sin espacios. Como en:


Seguimos y esperamos que se instale. Instalar es fácil, pero hay que tener especial cuidado al configurarlo...

Al acabar esta marcada una opción para lanzar el asistente de configuración. DEJADLO puesto.

Y acabad, claro xD.

En esta configuración, elegid una configuración detallada. Os diré las opciones a elegir, pero si queréis cambiar algo... bajo vuestra propia responsabilidad queda, sobre todo los marcados con un asterisco:

  - Developer Machine (por defecto).
  - Multifunctional Database (por defecto).
*- Por defecto, o si queréis almacenar los datos de mysql en otro lado adelante. At YOUR OWN risk. No lo recomiendo.
  - Decision Support (por defecto).
*- En el siguiente paso, veremos el puerto que usaremos. Es recomendable, si accederemos de forma externa al PC donde estamos instalando MySQL, abrir ese puerto, y añadir por tanto la excepción al firewall. El resto, por defecto.
  - Best Support for Multilingualism. Así almacenará datos en utf8, pudiendo almacenar carácteres de idiomas específicos y tal.
  - Por defecto, y asegúrate que estan activos el "Install As Windows Service" y el "Launch the MySQL server automatically".
*- Bien, password de root. Establece una compleja, alfanumérica a ser posible. Es necesario seguridad en este punto. Y NO actives la cuenta anónima, ni el acceso root externo, a menos que lo veas estrictamente necesario, o sepas lo que haces(at your own risk...).

Y con esto ya habremos acabado. Si se ejecuta sin fallos, perfecto :3 ya está todo.

Y en el próximo post, mencionaré un uso simple del MySQL CC, para manejar las BDs, mencionaré algunos aspectos de configuración de Apache y PHP, por si os resultan necesarias, y tras eso podremos dedicarnos a programar (Al fin... xD).

Haaasta otra~  :3

Seguidores

Etiquetas

About Me

Mi foto
Myaku Farron
Ver todo mi perfil
Hecho por Myaku. Con la tecnología de Blogger.