Seleccionar idioma:
Realizar Donación - Mods Premium - Portfolio



Este sitio utiliza cookies propias y de terceros. Si continúa navegando consideramos que acepta el uso de cookies. OK Más Información.
SMFPersonal  MSN Messenger - heracles@smfpersonal.net 
*

Mensajes: 13978

Agosto 03, 2016, 03:54:52 pm

Tema: Base de datos (Consultas Anidadas)


En este décimo tutorial sobre el desarrollo para smf hablaremos un poco sobre Bases de datos (Consultas Anidadas).



Base de datos (Consultas Anidadas)

Autor: ^HeRaCLeS^



En este décimo tutorial sobre el desarrollo para smf hablaremos un poco sobre:
Bases de datos (Consultas Anidadas)

Este sera el último tutorial hablando sobre base de datos y completaria la información del tutorial anterior.

Nota: Para poder hacer uso de todo esto deberemos globalizar las variables $smcFunc y $scripturl



Como ya mencionamos en el tutorial Variables globales la variable $smcFunc es del tipo array y tiene un conjunto de funciones generales, entre ellas las funciones que necesitamos para trabajar con la base de datos.
La variable $scripturl nos devuelve la url del sitio. Ej: tu_sitio.com/index.php

Para explicar esto vamos a trabajar sobre las tablas, columnas y datos existentes en smf, asi evitaremos repetir todos los pasos anteriores..
En este ejemplo veremos los ultimos 10 temas y la información del autor de cada tema.

Tablas: topics, messages y members
Columnas: id_topic, subject, member_name y id_member
Valor 1: Link del topic
Valor 2: Link del autor




Consultar datos:

Código: [Seleccionar]
<?php
// Lo primero que hacemos es globalizar las variables $smcFunc y $scripturl.
global $smcFunc$scripturl;

// Iniciamos la consulta
$sql $smcFunc['db_query']('','
SELECT t.id_topic,
m.subject,
u.member_name, u.id_member
FROM {db_prefix}topics AS t
LEFT JOIN {db_prefix}members AS u ON (u.id_member = t.id_member_started)
LEFT JOIN {db_prefix}messages AS m ON (m.id_msg = t.id_first_msg)
ORDER BY t.id_topic DESC LIMIT {int:limit} '
,
array(
'limit' => 10,
)
);
$datos = array();
while ($row $smcFunc['db_fetch_assoc']($sql)) {
$datos[] = array(
'topic' => '<a href="'.$scripturl.'?topic='.$row['id_topic'].'.0" title="'.$row['subject'].'" target="_blank">'.$row['subject'].'</a>',
'autor' => '<a href="'.$scripturl.'?action=profile;u='.$row['id_member'].'" title="'.$row['member_name'].'" target="_blank">'.$row['member_name'].'</a>',
);
}

foreach($datos AS $data)
echo 'Tema: '.$data['topic'].'<br />Autor: '.$data['autor'].'<br /><br />';

?>


Ahora vamos a explicar un poco que fue lo que hicimos.

$sql = Aca estariamos dandole a la variable $sql el valor de toda la consulta.
SELECT Con esto le decimos que lea las columnas especificas de las tablas seleccionadas. (t.id_topic, m.subject, u.member_name, u.id_member)
FROM {db_prefix}topics AS t Con esto le decimos que lea la tabla topics y ahora sera t.
LEFT JOIN Con esto haremos el anidado de las tablas, en este caso con (members y messages)
members AS u Con esto le decimos que lea la tabla members y que ahora sera u.
ON (u.id_member = t.id_member_started) Con esto le decimos que solo lea los datos que coincidan en las columnas (u.id_member y t.id_member_started)
messages AS m Con esto le decimos que lea la tabla messages y que ahora sera m.
ON (m.id_msg = t.id_first_msg) Con esto le decimos que solo lea los datos que coincidan en las columnas (m.id_msg y t.id_first_msg)
ORDER BY t.id_topic DESC Con esto le decimos que ordene de forma descendente por id de topic
LIMIT {int:limit} Con esto le decimos que solo lea la cantidad de resultados de la variable limit.
'limit' => 10, Con esto establecemos la cantidad del limite, en este caso 10.
$datos = array(); Definimos la variable $datos y le decimos que sera un array.
while Recorremos todos los valores obtenidos de la consulta (While es un bucle)
$datos[] = Agregamos todos los valores a la variable $datos.
'topic' => Creamos un link con los datos del topic.
'autor' => Creamos un link con los datos del autor.
foreach($datos AS $data) Recorremos todos los valores obtenidos por el while (Foreach es un bucle)
echo Imprimimos los datos obtenidos.

En este ejemplo el resultado seria:
Tema: Tema 1
Autor: Nombre de usuario



Notas:
Esta es una consulta anidada simple para que vean mas o menos como seria.
Lo referente a while foreach y echo se explicara en sus respectivos tutoriales. (Aca se utilizan solo para que vean los resultados)
Lo referente a LEFT JOIN se explicara en su respectivo tutorial. (Aca se utilizan solo para que vean los resultados)





Como ya mensione en otros tutoriales, yo explico y enseño lo basico...
Despues dependera de cada uno el uso que le de y la imaginacion que tenga para usarlo.

Script: Desde este Link podran descargar el script de este ejemplo.
Lo descargan.
Lo suben al root de su sitio.
Lo ejecutan: su_sitio/Consultas-Anidadas.php

Nota: El script esta todo comentado para su mejor comprension.



Nos vemos en el proximo tutorial sobre desarrollo de smf.



Usuario:
Contraseña:
Sesión: