Está en la página 1de 14

21/06/14 18:07 Memorias de un aprendiz de PHP

Pgina 1 de 14 http://www.rinconastur.com/php/php123.php
Sintaxis MySQL de seleccin de registros
Las sentencias de seleccin de registros requieren utilizar entre otras palabras clave como las que enumeramos a continuacin.
Observa que las hay dos tipos: obligatorias y opcionales. Observa tambin que algunas de las palabras clave son alternativas y por lo tanto,
incompatibles en una misma sentencia. La insercin ha de hacerse respetando un orden tal y como se enumera aqu debajo. Si alterramos ese
orden (p. ejemplo: colocando GROUP BY antes de WHERE) se producira un error y dejara de ejecutarse la sentencia.
Los prrafos siguientes estn organizados a dos niveles. Las intrucciones del primero de ellas tienen carcter obligatorio en la sentencia
de consulta. Las del segundo, sealadas con letra cursiva, son opcionales.
SELECT
Es la primera palabra de la sentencia de bsqueda y tiene carcter obligatorio.
SQL_BIG_RESULT
Es una clusula opcional que se usa para indicar al optimizador que el resultado va a tener una gran cantidad de registros.
En ese caso, MySQL utilizar tablas temporales cuando sea necesario para optimizar la velocidad de gestin de la informacin.
Esta clusula tambin puede ser utilizada dentro de GROUP BY.
SQL_BUFFER_RESULT
Es opcional y su nalidad es la de forzar a MySQL a tratar el resultado en un chero temporal. Ese tratamiento ayuda a
MySQL a liberar recursos ms rpidamente y es de gran utilidad (siempre desde el punto de vista de la rapidez) cuando es
necesario un largo proceso de clculo antes de enviar los resultados al cliente.
HIGH_PRIORITY
Esta clusula, opcional da prioridad al comando SELECT sobre otros comandos que simultneamente pudieran estar
intentando acceder a la tabla para escribir en ella (aadir o modicar registros). Si esta opcin est activa, los intentos de
escritura que pudieran producirse de forma simultnea deberan esperar al nal de este proceso para ejecutarse.
campo1, campo2, ...
Tienen carcter obligatorio y sealan los campos de la tabla que deben incluirse en la consulta. La consulta slo devolver
informacin de aquellos campos que estn enumerados aqu. Si se desea incluir a todos campos bastar con excribir * en esta
posicin. En este caso *tiene la condicin de carcter comodn cuyo signicado es todos los campos.
Los campos numricos pueden llevar asociadas funciones MySQL que devuelven informacin estadstica. La sintaxis de algunas de
esas funciones es la siguientes:
Consultas simples y mltiples (MySQLi)
Ver ndice
21/06/14 18:07 Memorias de un aprendiz de PHP
Pgina 2 de 14 http://www.rinconastur.com/php/php123.php
MAX(campo)
Devuelve el mayor de los valores de ese campo de entre todos los registros de la la consulta. Los registros comparados
puedes ser todos o una parte de ellos. Si la sentencia incluye la condicin GROUP BY, en cuyo caso devolver el mximo de
cada grupo y si incluye la opcin WHERE solo sern comparados los registros que cumplan tal condicin.
MIN(campo)
Idntica a la anterior en cuanto a criterios de seleccin, esta funcin devuelve el manorde los valores del campo en el mbito
establecido por las evuntuales condiciones que pueda incluir la sentencia.
AVG(campo)
Devuelve el valor promedio de todos los registros numricos seleccionados con los mismos criterios del caso anterior.
SUM(campo)
Devuelve la suma de todos los valores del campo seleccionado y en el mbito establecido por los parmetros de la consulta.
STDDEV(campo)
Devuelve la estimacin de la desviacin tpica de la poblacin formada por los valores del campo.
COUNT(campo)
Cuenta los valores no nulos del campo indicado.
Cuando se aplica una de estas funciones el resultado de la consulta contiene una sola lnea, salvo que se incluya opcin
GROUP BY, en cuyo caso devolver tantas lneas como grupos resulten.
FROM tabla
Esta expresin indica a MySQL el nombre de la tabla en la que debe efectuarse la consulta.
WHERE denicion
Esta instruccin tiene carcter opcional y su utilidad es la de ltrar la consulta estableciendo los criterios de seleccin de los
registros que debe devolver. Si se omite WHERE, la consulta devolver todos los registros de la tabla. En la tabla de
ejemplos tienes informacin sobre las formas de denir los criterios de seleccin de esta opcin.
GROUP BY denicion
Tiene carcter opcional y su nalidad es la de presentar los resultados de la consulta agrupados segn el criterio establecido
en su denicin. Resulta de gran utilidad cuando se pretende obtener valores estadsticos de los registros que cumplen
determinadas condiciones (las condiciones del agrupamiento).
ORDER BY denicion
Tambin tiene carcter opcional y su utilidad es la de presentar la informacin de la consulta ordenada por los contenidos de
uno o varios campos. Siempre tiene como opcin complementaria de que en cada campo utilizado para la ordenacin
puede establecerse uno de estos criterios ASC (ascendente, es el valor por defecto) o DESC (descendente). Si no se
establece ningn orden los resultados de la consulta aparecern en el mismo orden en el que fueron aadidos los registros.
LIMIT m, n
Esta clusula es opcional y permite establecer cuntos y cules registros han de presentarse en la salida de la consulta.
Por ejemplo: LIMIT 4, 8 indicara a MySQL que la consulta debera mostrar OCHO registros contados a partir del quinto (s, el
quinto porque LIMIT considera el primer registro como CERO).
El criterio lmite se aplica sobre los resultados de la salida, es decir, sobre los resultados seleccionados, ordenados y
21/06/14 18:07 Memorias de un aprendiz de PHP
Pgina 3 de 14 http://www.rinconastur.com/php/php123.php
ltrados siguiendo los criterios establecidos por las clusulas anteriores. Si se escribe como un solo parmetro (LIMIT k),
MySQL lo interpretar como que k es el segundo de ellos y que el primero es CERO, es decir: LIMIT 0, k
Algunos ejemplos de consultas simples
Las consultas de los datos y registros contenidos en una tabla ofrecen un amplsimo abanico de posibilidades a partir de las opciones
descritas anteriormente. Veamos algunas de las posibilidades.
La consulta ms simple
Si utilizamos la sentencia
SELECT * FROM tabla
obtendremos informacin sobre todos los campos (*) y la salida estar en el mismo orden en el que fueron aadidos los datos. Si
visualizas este ejemplo, vers que aparecen ordenados por el valor autonumrico del campo Contador lo cual, como ves, resulta coherente con
la armacin anterior.
Consulta mediante
procesos
Ver cdigo
fuente
Consulta mediante
objetos
Ver cdigo
fuente
Consultando slo algunos campos
Ahora utilizaremos la sentencia
SELECT campo1,campo2, ... FROM tabla
y tendremos como resultado una lista completa, por el mismo orden que la anterior, pero slo mostrando los campos indicados.
Consulta mediante
procesos
Ver cdigo
fuente
Consulta mediante
objetos
Ver cdigo
fuente
Consultando slo algunos campos y limitando la salida a n registros
Ahora utilizaremos la sentencia
SELECT campo1,campo2, ... FROM tabla LIMIT (n, m)
y tendremos como resultado una lista que contendr m registros a partir del n+1, por el mismo orden que la anterior, y mostrando los
campos indicados.
Consulta mediante
procesos
Ver cdigo
fuente
Consulta mediante
objetos
Ver cdigo
fuente
21/06/14 18:07 Memorias de un aprendiz de PHP
Pgina 4 de 14 http://www.rinconastur.com/php/php123.php
Consultando slo algunos campos y ordenando la salida
Utilizaremos la sentencia MySQL de esta forma
SELECT campo1,campo2, ... FROM tabla ORDER BY campo_n [ASC|DESC], campo_m [ASC|DESC]
y tendremos como resultado una lista ordenada por el primero de los campos indicados en ORDER BY, y en caso de coincidencia de
valores en ese campo, utilizaramos el criterio de ordenacin sealado en segundo lugar.
Consulta mediante
procesos
Ver cdigo
fuente
Consulta mediante
objetos
Ver cdigo
fuente
Consulta seleccionando registros
Utilizaremos la sentencia MySQL de esta forma
SELECT campo1, ... FROM tabla WHERE condicin
que nos devolver la lista de registros que cumplen la condicin indicada. Aqu tienes un ejemplo muy sencillo.
Consulta mediante
procesos
Ver cdigo
fuente
Consulta mediante
objetos
Ver cdigo
fuente
Los resultados de la sentencia SELECT
El manejo de los resultados obtenidos mediante mysqli_query o $objeto->query ofrece varias posibilidades. El bloque de informacin
resultante de una consulta y recogido en $resultado est organizado en las que pueden manejadas de diversas formas.
Una primera informacin que puede resultar muy til e interesante es:
$num_resultados=mysqli_num_rows($resultado)
o
$num_resultados=$resultado->num_rows
En ambos casos la variables $num_resultados recoger el nmero de registros (las) obtenidos como resultado de la consulta. La primera
de las opciones se utiliza cuando se gestiona la consulta mediante procesos mientras que es segundo corresponde a consultas mediante objetos.
Los valores contenidos en cada la de los resultados pueden leerse mediante
$array=mysqli_fetch_row($resultado)
21/06/14 18:07 Memorias de un aprendiz de PHP
Pgina 5 de 14 http://www.rinconastur.com/php/php123.php
o
$array=$resultado->fetch_row()
dnde $array es un array escalar que contiene los valores del registro actual (aquel que seala el puntero interno). Los ndices de este
array van asociados al orden en el que estn escritos los nombres de los campos dentro de la sentencia select.
Si no se indica otra cosa el puntero comienza un recorrido por el primer registro del resultado (la 0) y en las sucedsivas llamadas a
mtodo fetch_row se va desplazando a la siguiente la. Por eso, mediante un bucle while podemos recorriendo los diferentes registros del
resultado y convirtiendo cada uno de ellos en un array escalar. Aqu tienes un ejemplo
Consulta mediante
procesos
Ver cdigo
fuente
Consulta mediante
objetos
Ver cdigo
fuente
Los valores contenidos en cada la de los resultados tambin pueden leerse mediante
$array=mysqli_fetch_assoc($resultado)
o
$array=$resultado->fetch_assoc()
dnde $array es un array asociativo que contiene los valores del registro actual (aquel que seala el puntero interno). Los ndices de este
array son los nombres de los campos dentro de la sentencia select.
Si no se indica otra cosa el puntero comienza un recorrido por el primer registro del resultado (la 0) y en las sucedsivas llamadas a
mtodo fetch_assoc se va desplazando a la siguiente la. Por eso, mediante un bucle while podemos recorriendo los diferentes registros del
resultado y convirtiendo cada uno de ellos en un array asociativo. Aqu tienes un ejemplo
Consulta mediante
procesos
Ver cdigo
fuente
Consulta mediante
objetos
Ver cdigo
fuente
Una tercera opcin para ir leyendo los valores contenidos en cada la de los resultados es la que utiliza
$objeto=mysqli_fetch_object($resultado)
o
$objeto=$resultado->fetch_object()
dnde $objeto es un objeto cuyas propiedades son los nombres de los campos incluidos en la sentencia select y el valor el resultante de la
consulta para ese campo en la la actual (aquella a la que apunta el puntero interno).
Si no se indica otra cosa el puntero comienza un recorrido por el primer registro del resultado (la 0) y en las sucesivas llamadas a mtodo
fetch_object se va desplazando a la siguiente la. Por eso, mediante un bucle while podemos recorriendo los diferentes registros del resultado y
convirtiendo cada uno de ellos en un objeto con las propiedades descritas. Aqu tienes un ejemplo
Consulta mediante Ver cdigo Consulta mediante Ver cdigo
21/06/14 18:07 Memorias de un aprendiz de PHP
Pgina 6 de 14 http://www.rinconastur.com/php/php123.php
procesos fuente objetos fuente
En esta nueva opcin se realiza un lectura nica del contenido de todas las las
$array_bidimensional=mysqli_fetch_all($resultado)
o
$array_bidimensional=$resultado->fetch_all()
dnde $array_bidimensional es un array cuyo primer ndice coincide con el nmero de orden (empezando por cero) de cada una de las
las del resultado y cuyo segundo ndice es el nmero de columna entendiendo como tales cada uno de los campos incluidos en la sentencia
SELECT por el orden de inclusin enla misma y contados a partir de cero.
La extraccin de los diferentes valores requerira un doble bucle de lectura. El primero nos ira posicionando en cada una de las las del
resultado (el primer ndice) y el segundo bucle recorrera todos de aquella la. Aqu tienes un ejemplo
Consulta mediante
procesos
Ver cdigo
fuente
Consulta mediante
objetos
Ver cdigo
fuente
Hay situaciones en las que puede resultarnos de inters conocer nicamente los valores de alguno o algunos de los registros incluidos en
el resultado de una consulta. Puede, por ejemplo, que nos interese conocer el nicamente el primer registro (o el ltimo, o el que ocupa la
posicin 38) tal como aparecen en el resultado de la ejecucin de la funcin mysqli_query o del mtodo query() si se trata de objetos. Tanto la
funcin mysql_fech_row() como el mtodo fetch_row() extreaen aquel registro (la de datos) al que seala el apuntador. Para posicionar de forma
arbitrarie el apuntador de resgistros mysqli dispone las siguientes funciones:
mysqli_data_seek($resultado, posicion)
dnde $resultado es el objeto resultante de una consulta realizada por medio de la funcin mysqli_query() y posicin es un nmero entero
que explicita la posicin (la prima posicin se identica mediante cero) a la que pretendemos orientar el apuntador de lectura de mysqli_fetch_row.
El proceso podra ser similar a este:
$resultado=mysqli_query($identicador,sentencia_MySQL); // realiza la consulta y recoge el resultado en la variable $resultado
mysqli_data_seek($resultado,posicion); //Sita el apuntador en la la sealada por posicin
$la=mysqli_fetch_row($resultado); //Lee el registro (la) que seala en apuntador anterior y recogiendo el resultado en el array $la
Cuando se trata de que la programacin est orientada a objetos el mtodo que debemos utilizar es el siguiente:
$resultado->data_seek(posicion)
dnde $resultado es el objeto resultante de una consulta realizada por medio del mtodo $objeto->query() y posicin es un nmero entero
que explicita la posicin (la prima posicin se identica mediante cero) a la que pretendemos orientar el apuntador de lectura que usar el
posterior mtoco fetch_row. El proceso podra ser similar a este:
$resultado=$objeto->query(sentencia_MySQL); // el mtodo query realiza la consulta y recoge el resultado en el nuevo objeto $resultado
$resultado->data_seek(posicion); //Sita el apuntador en la la sealada por posicin
21/06/14 18:07 Memorias de un aprendiz de PHP
Pgina 7 de 14 http://www.rinconastur.com/php/php123.php
$la=$resultado->fetch_row(); //Lee el registro (la) que seala en apuntador anterior y recogiendo el resultado en el array $la
Como es lgico tambin pueden usuarse fetch_object fetch_assoc en lugar del fetch_row del pseudocdigo anterior.
Consultas condicionadas
La clasula WHERE permite un variado abanico de condiciones, que trataremos de resumir aqu. Algunos de ellas son los siguientes:
Operador
Tipo
de campo
Sintaxis Descripcin
Progamacin
por procesos
Programacin
orientada a
objetos
Cdigo
fuente
Ver
ejemplo
Cdigo
fuente
Ver
ejemplo
= Numrico
WHERE
campo=num
Selecciona los registros que contienen en el campo un valor igual a num Ver Probar Ver Probar
= Cadena
WHERE
campo="cadena"
Selecciona los registros que contienen en el campo una cadena idntica a cadena (*) Ver Probar Ver Probar
< Numrico
WHERE
campo<num
Selecciona los registros que contienen en el campo un valor menor a num Ver Probar Ver Probar
< Cadena
WHERE
campo<"cadena"
Selecciona los registros que contienen en el campo una cadena cuyos n primeros
caracteres son menores que los de la cadena, siendo n el nmero de caracteres que
contiene cadena. (**)
Ver Probar Ver Probar
<= Numrico
WHERE
campo<=num
Selecciona los registros que contienen en el campo un valor menor O igual a num Ver Probar Ver Probar
<= Cadena
WHERE
campo<="cadena"
Selecciona los registros que contienen en el campo una cadena cuyos n primeros
caracteres son menores que los de la cadena, siendo n el nmero de caracteres que
contiene cadena y aade respecto al caso anterior la opcin de que en caso de que
ambos valores fueran iguales tambin los presentara (**)
Ver Probar Ver Probar
> Numrico
WHERE
campo>num
Selecciona los registros que contienen en el campo un valor mayor a num Ver Probar Ver Probar
> Cadena
WHERE
campo>"cadena"
Selecciona los registros que contienen en el campo una cadena cuyos n primeros
caracteres son mayores que los de la cadena, siendo n el nmero de caracteres que
contiene cadena. (**)
Ver Probar Ver Probar
>= Numrico
WHERE
campo>=num
Selecciona los registros que contienen en el campo un valor mayor o igual a num Ver Probar Ver Probar
>= Cadena
WHERE
campo>="cadena"
Selecciona los registros que contienen en el campo una cadena cuyos n primeros
caracteres son mayores que los de la cadena, siendo n el nmero de caracteres que
contiene cadena y aade respecto al caso anterior la opcin de que en caso de que
ambos valores fueran iguales tambin los presentara (**)
Ver Probar Ver Probar
IN
Numrico
o
Cadena
WHERE campoIN
(valor1,valor2..)
Selecciona los registros que contienen en el campo valores que coinciden con alguno de
los especicados dentro del parntesis. Cuando se trata de valores no numricoz han de
ir entre comillas
Ver Probar Ver Probar
Numrico WHERE campo
Selecciona los registros en los que los valores contenidos en el campo seleccionado
estn comprendidos en el intervalo valor1 (mnimo) valor2 (mximo) incluyendo en la
21/06/14 18:07 Memorias de un aprendiz de PHP
Pgina 8 de 14 http://www.rinconastur.com/php/php123.php
BETWEEN o
Cadena
BETWEEN valor1
AND valor2
seleccin ambos extremos.
Cuando los contenidos de los campos son cadenas sigue los mismos criterios que se
indican para los dems operadores de comparacin
Ver Probar Ver Probar
IS NULL Cadena
WHERE campo
IS NULL
Selecciona los registros en los que los valores contenidos en el campo seleccionado son
NULOS
Ver Probar Ver Probar
IS NOT
NULL
Cadena
WHERE campo
IS NOT NULL
Selecciona los registros en los que los valores contenidos en el campo seleccionado son
NO NULOS
Ver Probar Ver Probar
(*) Cuando se trata de cadenas de caracteres, el concepto menor que signica anterior en la ordenacin de los caracteres segn su cdigo ASCII y mayor que signica
posterior en esa misma ordenacin.
(**) La discriminacin de Maysculas/Minsculas depender del tipo de campo.
Recuerda que los tipo BLOB hacen esa discriminacin, mientras que los de tipo TEXT son insensibles a Maysculas/Minsculas.
Cuando se trata de comparar cadenas MySQL dispone de una potente instruccin (LIKE) que permite establecer los criterios de seleccin
a toda o parte de la cadena. Su sintaxis contempla distintas posibilidades utilizando dos comodines>: % (que se comporta de forma similar al (*)
en las bsquedas de Windows) y _ (de comportamiento similar a (?) en Windows). Aqu tienes algunas de sus posibilidades:
Sintaxis Descripcin
Progamacin
por procesos
Programacin
orientada a
objetos
Cdigo
fuente
Ver
ejemplo
Cdigo
fuente
Ver
ejemplo
WHERE campo
LIKE '%cadena%'
Selecciona todos los registros que contengan la cadena en el campo indicado sea cual fuere su posicin Ver Probar Ver Probar
WHERE campo
LIKE 'cadena%'
Selecciona todos los registros en los que el campo indicado que contengan la cadena exactamente al principio del
campo
Ver Probar Ver Probar
WHERE campo
LIKE '%cadena'
Selecciona todos los registros en los que el campo indicado que contengan la cadena exactamente al nal del
campo
Ver Probar Ver Probar
WHERE campo
LIKE '_cadena%'
Selecciona todos los registros en los que el primer caracter del campo puede ser cualquiera pero los siguientes han
de ser exactamente los indicados en cadena pudiendo ir seguidos de cualesquiera otros caracteres
Ver Probar Ver Probar
El comodn (_) puede ir tanto al principio como al nal y puede repetirse tantas veces como sea necesario. Por tanto sera correcto LIKE
'___es%' y tambin LIKE 'a___es%' as como: LIKE '%a___es'.
La clasula WHERE aun tiene ms opciones. Acepta mltiples condiciones vinculadas por los operadores lgicos AND, OR, NOT o sus
sintaxis equivalentes: &&, || y !.
El comportamiento de estos operadores es idntico al descrito para sus homnimos de PHP en esta pgina
Utilizando funciones sobre campos
21/06/14 18:07 Memorias de un aprendiz de PHP
Pgina 9 de 14 http://www.rinconastur.com/php/php123.php
Por medio de la sintaxis
SELECT MAX(campo1), MIN (campo2), ... FROM tabla
obtendramos UNA SOLA FILA cuyos valores seran los resultados de la aplicacin de las funciones a todos los registros del campo
indicado. Aqu tienes un ejemplo que determina todos los valores de esos estadsticos aplicados al campo Contador de nuestra tabla demo4.
Consulta mediante
procesos
Ver cdigo
fuente
Consulta mediante
objetos
Ver cdigo
fuente
Aplicando la opcin GROUP BY
Tal como sealamos al margen, las funciones anteriores pueden aplicarse a grupos de registros seleccionados mediante un criterio
GROUP BY (nombre del campo)
En este ejemplo obtendremos los mismos parmetros estadsticos que en el anterior, pero ahora agrupados por sexo, lo que signicara
que obtendremos dos las de resultados. Aqu tienes el ejemplo
Consulta mediante
procesos
Ver cdigo
fuente
Consulta mediante
objetos
Ver cdigo
fuente
<
Manejo de fechas en las consultas
MySQL dispone de algunas clusulas de gestin de fechas que pueden tener una gran utilidad a la hora de gestionar consultas. Son las
siguientes:
DATE_FORMAT( campo,formato)
Las diferentes opciones de formato las tienes en la tabla. Es importante tener en cuenta que la sintaxis correcta es %Y (sin espacio) ya
que si hubiera un espacio % Y interpretara la letra Y como un texto a incluir.
CURDATE()
Dentro de DATE_FORMAT se puede incluir -en vez del nombre del campo- una cadena en la que se indique una fecha en formato YYYY-
MM-DD hh:mm:ss. Puedes verlo en los ejemplos. De igual modo es posible sustituir el nombre del campo -o la cadena- por la funcin CURDATE()
que recoge la fecha actual del sistema (nicamente da, mes y ao). A efectos de horas, minutos y segundos CURDATE() va a tomar el
medioda de la fecha actual.
CURTIME()
Se comporta de forma similar a CURDATE(). Devuelve la hora actual del sistema que alberga el servidor MySQL en formato hh:mm:ss
21/06/14 18:07 Memorias de un aprendiz de PHP
Pgina 10 de 14 http://www.rinconastur.com/php/php123.php
CURRENT_TIMESTAMP()
Se comporta de forma similar a CURDATE(). Devuelve la fecha y hora actual del sistema en formato YYYY-MM-DD hh:mm:ss
NOW()
Es un alias de CURRENT_TIMESTAMP().
Formato Descripcin Sentencia MySQL
Progamacin
por procesos
Programacin
orientada a objetos
Cdigo
fuente
Ver
ejemplo
Cdigo
fuente
Ver
ejemplo
%d Da del mes en formato de dos dgitos DATE_FORMAT(Nacimiento,'%d') Ver Probar Ver Probar
%e Da del mes en formato de uno dos dgitos DATE_FORMAT(Nacimiento,'%e') Ver Probar Ver Probar
%D Nmero de da seguido del sujo en ingls DATE_FORMAT(Nacimiento,'%D') Ver Probar Ver Probar
%m Nmero del mes en formato de dos dgitos DATE_FORMAT(Nacimiento,'%m') Ver Probar Ver Probar
%c Nmero del mes en formato de uno o dos dgitos DATE_FORMAT(Nacimiento,'%c') Ver Probar Ver Probar
%M Nombre del mes (en ingls) DATE_FORMAT(Nacimiento,'%M') Ver Probar Ver Probar
%b Nombre del mes abreviado (en ingls) DATE_FORMAT(Nacimiento,'%b') Ver Probar Ver Probar
%y Nmero del ao en formato de dos dgitos DATE_FORMAT(Nacimiento,'%y') Ver Probar Ver Probar
%Y Nmero del ao en formato de cuatro dgitos DATE_FORMAT(Nacimiento,'%Y') Ver Probar Ver Probar
%w Nmero de da de la semana 0=Domingo ... 6=Sbado DATE_FORMAT(Nacimiento,'%w') Ver Probar Ver Probar
%W Nombre del da de la semana (en ingls) DATE_FORMAT(Nacimiento,'%W') Ver Probar Ver Probar
%W Nombre abreviado del da de la semana (en ingls) DATE_FORMAT(Nacimiento,'%W') Ver Probar Ver Probar
%j Nmero de da del ao en formato de 3 dgitos DATE_FORMAT(Nacimiento,'%j') Ver Probar Ver Probar
%U
Nmero de semana del ao considerando el DOMINGO
como primer da de la semana (dos dgitos)
DATE_FORMAT(Nacimiento,'%U') Ver Probar Ver Probar
%u
Nmero de semana del ao considerando el LUNES
como primer da de la semana (dos dgitos)
DATE_FORMAT(Nacimiento,'%u') Ver Probar Ver Probar
La fecha para los ejemplos siguientes la extraemos de una variable del tipo: $fecha="2005-10-12 14:23:42" ya que la tabla no contiene
campos de fecha que incluyan horas, minutos y segundos
%H Hora con dos dgitos (formato 0 a 24 horas) DATE_FORMAT($fecha,'%H')
Ver Probar Ver Probar
%k Hora con uno dos dgitos (formato 0 a 24 horas) DATE_FORMAT($fecha,'%k')
%h Hora con dos dgitos (formato 0 a 12 horas) DATE_FORMAT($fecha,'%h')
%I Hora con uno dos dgitos (formato 0 a 12 horas) DATE_FORMAT($fecha,'%I')
%i Minutos con dos dgitos DATE_FORMAT($fecha,'%i')
21/06/14 18:07 Memorias de un aprendiz de PHP
Pgina 11 de 14 http://www.rinconastur.com/php/php123.php
%s Segundos con dos dgitos DATE_FORMAT($fecha,'%s')
%r
Hora completa (HH:mm:ss) en formato de 12
horas indicando AM PM
DATE_FORMAT($fecha,'%r')
%T Hora completa (HH:mm:ss) en formato de 24 horas DATE_FORMAT($fecha,'%T')
% texto Incluye el texto que se indica detrs del % DATE_FORMAT($fecha,'% texto')
%p Aade AM PM dependiendo de la Hora DATE_FORMAT($fecha,'%p')
Se pueden combinar a voluntad varias opciones utilizando una sintaxis de este tipo:
'% Hoy es: %d - %m - %Y % es %W % estamos en el mes de %M % <br>y van transcurridos %j % dias de este ao.<br>Son las %r'
Setencias mltiples
Cuando usamos mysqli podemos ejecutar mltiples sentencias en una sola instruccin. Para ello debemos empezar encadenando las
sucesivas sentencias incluyndolas una a continuacin de otra y separndolas mediante un punto y coma (;).
SELECT * FROM tabla1 ; SELECT campo1 FROM tabla2 ; DROP TABLE IF EXISTS tabla3
La ejecucin de este tipo de sentencias requiere la utilizacin de la funcin:
mysqli_multi_query($conexion,sentencia_multiple)
dnde, en el caso de programacin mediante procesos, $conexion es el identicador de la conexin y sentencia_multiple el una sentencia
mltiple en el formato comentado en el prrafo anterior. Devuelve un valor booleano (true o false).
Cuando se trata de programacin orientada a objetos es preciso recurrir al mtodo multi_query que mediante la sintaxis:
$objeto->multi_query(sentencia_multiple)
en la que sentencia_multiple es una sentencia mltiple en el formato comentado anteriormente. Devuelve un valor booleano (true o false).
Cuidado!
Los mensajes de error slo se visualizan en le caso de producirse este en la ejecucin de la primera de las sentencias
Sentencias que no devuelven valores
Cuando se trata de crear, borrar o modicar tablas, lo habitual es que se realice el proceso sin necesidad de visualizar ningn resultado.
Esos casos, aparentemente los ms simples, podran tratarse mediante de la forma que puedes ver en el cdigo fuente de estos dos ejemplos de
creacin de tres tablas.
Cdigo fuente Cdigo fuente
21/06/14 18:07 Memorias de un aprendiz de PHP
Pgina 12 de 14 http://www.rinconastur.com/php/php123.php
mediante procesos mediante objetos
Pese a incluir un condicional para advertirnos de eventuales errores solo se activara el mensaje de error en el caso de que este se
produjese en la primera de las sentencias.
Sentencias que devuelven valores
Cuando se trata de sentencias que devuelven valores como ocurre con las consultas es necesario utilizar algunas de las funciones o
mtodos que comentamos a continuacin
$resultado=mysqli_store_result($conexion)
o
$resultado=$objeto->store_result()
Transere a $resultado el conjunto de resultados de la ltima consulta en la conexin de base de datos. En el primer caso (usando
procesos) se requiere el parmetro $conexion. En el segundo supuesto (orientado a objetos) el mtodo no requiere ningn parmetro.
$resultado=mysqli_use_result($conexion)
o
$resultado=$objeto->use_result()
Se utiliza para iniciar la recuperacin de un conjunto de resultados de la ltima consulta ejecutada. Aunque a primera vista pueda parecer
muy similar a lo anterior hay una importantsima diferencia dado que no se transere el conjunto completo de resultados y por lo tanto no se
pueden utilizar funciones como mysqli_data_seek () para pasar a un registro en particular dentro del conjunto.
Cuando cualquiera de las opciones (store o use) se ejecuta inmediatamente despus de la ejecucin de un multi_query recoger los
resultado de la primera de las sentencias que contiene.
mysqli_free_result($resultado)
o
$resultado->free()
Liberan la memoria ocupada por los resultados. Como en casos anteriores la primera sentencia se utiliza cuando se programa por
procesos y la segunda cuando se hace por objetos. No es estrictamente necesario utilizarlos dado que toda la memoria utilizada por los
resultados asociados se libera automticamente al nalizar la ejecucin del script. Slo tiene utilidad prctica en aquellos casos en los que las
consultas devuelven una cantidad de datos muy grande.
mysqli_more_results($conexion)
o
$objeto->more_results()
Comprueba si hay algn resultado ms de una consulta mltiple. Devuelve un valor booleano
mysqli_next_result($conexion)
o
21/06/14 18:07 Memorias de un aprendiz de PHP
Pgina 13 de 14 http://www.rinconastur.com/php/php123.php
$objeto->next_result()
Prepara siguiente conjunto de resultados de una llamada previa a mysqli_multi_query (), que pueden ser recuperados por
mysqli_store_result () o mysqli_use_result ().
Consulta mediante
procesos
Ver cdigo
fuente
Consulta mediante
objetos
Ver cdigo
fuente
Consulta mediante
procesos
Ver cdigo
fuente
Consulta mediante
objetos
Ver cdigo
fuente
Creacin de tablas a partir de la consulta de otra tabla
Es frecuente -podra decirse que es lo habitual- relacionar tablas mediante campos con idntico contenido. Supongamos que entre los
individuos de nuestra tabla demo4 se pretende establecer un proceso de seleccin para elegir entre ellos un nmero determinado de
astronautas, pongamos por caso.
Supongamos tambin, que la seleccin va a constar de tres pruebas que sern juzgadas y calicadas por tres tribunales distintos.
Una primera opcin sera crear tres tablas una para cada tribunal e incluir en ellas todos los datos de cada uno de los individuos. Esa
opcin es factible pero no es ni la ms cmoda, ni tampoco es la ms rpida ni la que menos espacio de almacenamiento necesita. No debemos
olvidar que una tabla puede tener una enorme cantidad de registros.
Una opcin alternativa sera crear tres nuevas tablas que slo contuvieran dos campos cada una. Por ejemplo el campo DNI y el campo
Calicacin. Como quiera que el campo DNI ha de contener los mismos valores en las cuatro tablas y adems es un campo nico podran
crearse las nuevas tablas y luego copiar en cada una de ellas todos los DNI de la tabla original. Nos garantizara que no habra errores en los
DNI y adems nos garantizara que se incluyeran todos los aspirantes en esas nuevas tablas.
Aqu tienes el cdigo fuente de un script que crea esas tres tablas (a las que hemos llamado demodat1, demodat2 y demodat3). Como
podrs observar hemos utilizado una sentencia mltiple para crear las tablas y posteriormente hemos hecho las inserciones de datos en cada una
de ellas.
Cdigo fuente
mediante procesos
Cdigo fuente
mediante objetos
Una consulta conjunta de varias tablas
MySQL permite realizar consultas simultneas en registros situados en varias tablas.
Para ese menester se usa la siguiente sintaxis:
SELECT tabla1.campo1, tabla2.campo2, ... FROM tabla1, tabla2
21/06/14 18:07 Memorias de un aprendiz de PHP
Pgina 14 de 14 http://www.rinconastur.com/php/php123.php
en la que, como ves, modicamos ligeramente la sintaxis ya que anteponemos el nombre de la tabla al del campo correspondiente separando
ambos nombres por un punto, con lo cual no hay posibilidad de error de identicacin del campo incluso cuando campos de distinta tabla
tengan el mismo nombre.
Otra innovacin -respecto a los ejemplos anteriores- es que detrs de la clusula FROM escribimos los nombres de todas las tablas que est
usando SELECT.
A partir de ah se pueden establecer todo tipo de relaciones para las sentencias WHERE, ORDER BY y GROUP BY utilizando para ello
campos de cualquiera de las tablas sin otra particularidad ms que poner cuidado al aludir a los campos utilizando siempre la sintaxis
nombre_tabla.nombre_campo.
A modo de ejemplo hemos procurado comentarlo lnea a lnea aqu tienes un script PHP que hace una consulta conjunta de las tablas
demo4, demodat1, demodat2 y demodat3 y nos presenta una tabla con los datos personales y las puntuaciones de las tres pruebas as como
las suma de puntos de las tres y, adems, ordena los resultados -de mayor a menor- segn la suma de las tres puntuaciones.
Consulta mediante
procesos
Ver cdigo
fuente
Consulta mediante
objetos
Ver cdigo
fuente
Ir a la pgina
anterior
Avisos de error
y/o sugerencias
Ir a la pgina
ndice
Ir a la pgina
siguiente

También podría gustarte