Mostrando entradas con la etiqueta Bases de datos. Mostrar todas las entradas
Mostrando entradas con la etiqueta Bases de datos. Mostrar todas las entradas

Super query sobre Northwind

Antiguamente, en mis clases en UPIITA el profesor Carlos de la Cruz había pedido un query sobre la base de datos Northwind que nos devolviera las órdenes que tuvieran dos productos iguales, en aquel momento no pude hacerlo (t_t), pero ahora que lo ha vuelto a pedir en el grupo de mi maigo @Rosend_mc, me lo tomé personal y aquí está.

La consulta nos regresará pares de órdenes, con al menos dos productos iguales, sé que es enooorme y que seguro hay una solución mejor pero como siempre digo: por algo se empieza. Dejo el Script en SQL y un PDF en el que intento explicar los detalles de la consulta.

Descargar PDF con la explicación
SELECT DISTINCT O1.Or1
,O2.Or2
FROM (
SELECT OD1.OrderID Or1
,OD2.OrderId Or2
,OD1.ProductID
,OD2.ProductID P1
FROM [Order Details] OD1
INNER JOIN [Order Details] OD2
ON OD1.ProductID = OD2.ProductID
AND OD1.OrderID <> OD2.OrderID
WHERE OD1.OrderID IN (
SELECT OD.OrderID
FROM [Order Details] OD
GROUP BY OD.OrderID
HAVING COUNT(OD.ProductID) >= 2
)
AND OD2.OrderID IN (
SELECT OD.OrderID
FROM [Order Details] OD
GROUP BY OD.OrderID
HAVING COUNT(OD.ProductID) >= 2
)
) O1
INNER JOIN (
SELECT OD1.OrderID Or1
,OD2.OrderId Or2
,OD1.ProductID
,OD2.ProductID P2
FROM [Order Details] OD1
INNER JOIN [Order Details] OD2
ON OD1.ProductID = OD2.ProductID
AND OD1.OrderID <> OD2.OrderID
WHERE OD1.OrderID IN (
SELECT OD.OrderID
FROM [Order Details] OD
GROUP BY OD.OrderID
HAVING COUNT(OD.ProductID) >= 2
)
AND OD2.OrderID IN (
SELECT OD.OrderID
FROM [Order Details] OD
GROUP BY OD.OrderID
HAVING COUNT(OD.ProductID) >= 2
)
) O2
ON O1.Or1 = O2.Or1
AND O1.Or2 = O2.Or2
AND O1.P1 <> O2.P2

Si lo mejoran no duden en pasarme su script.


¡Saludos!
@fferegrino :)

Envío de correos "desde la base de datos" con .NET

Seguro hay otras maneras de hacerlo, pero cuando tienes que hacerlo rápido no hay muchas opciones, hablo de enviar correos periódicamente desde datos tomados de la base de datos.

Forma de uso
La solución que aquí propongo es de cierta manera "dinámica", ya que podemos usar este programita para enviar tantos correos como deseemos, lo único que necesitamos hacer es enviarle como parámetro el stored procedure del cual consultará los datos, el procedimiento le deberá devolver estas tres columnas al programa:

  • DESTINATARIOS: Una columna que contiene los correos a los cuales será enviado el mensaje. Los correos deberán ir separados por un ;.
  • ASUNTO: Contiene el asunto con el que será enviado el correo.
  • MENSAJE: El mensaje que contendrá el correo, puede ser HTML (recomiendo sea básico).



Como mencioné al principio de todo: probablemente haya mejores maneras de hacerlo ya que de esta manera dejamos toda la carga a la BD ya que es ella quien tendría que formar el mensaje, el dinamismo del que hablo radica en que nosotros podemos, con la ayuda del stored procedure sacar cualquier información que necesitemos de la base.

La forma de usar el programa es la siguiente:
$ SendMails storedProcedure
La mejor parte es que gracias a las tareas de Windows podemos programar el programa para que se ejecute periódicamente, tantas veces como deseamos y con un procedimiento distinto para enviar correos distintos cada ocasión.

Para configurarlo necesitamos poner nuestra cadena de conexión en el archivo app.config, así como los parámetros para enviar el correo, como el host, usuario, puerto...
<configuration>
<appSettings>

<add key="mailHost" value="smtp.gmail.com"/>
<add key="mailUser" value="ejemplo@gmail.com"/>
<add key="port" value="587"/>
<add key="ssl" value="true"/>
<add key="user" value="ejemplo@gmail.com"/>
<add key="password" value="random*Pass"/>

</appSettings>
<connectionStrings>
<add name="CON" connectionString="Data Source=localhost\SQL;Initial Catalog=DB;User ID=US;Password=PSWD"
providerName="System.Data.SqlClient"/>
</connectionStrings>
</configuration>

SendMailsApp (Se incluyen las librerías de Microsoft Practices necesarias para que el programa funcione).

¿Tienes alma de desarrollador?

Si necesitas algo más especializado te dejo el código la solución del programa hecho en C# y con Visual Studio  para que lo modifiques a tu gusto.

Cualquier duda o comentario siempre es bienvenido :)

SendMailsSource (Se necesitan algunas librerías de Microsoft Practices incluídas en el enlace de arriba).

¡Saludos!
@fferegrino :)

Northwind en MySQL

Pues por aquello de no instalar MSSQLServer, aquí dejo el script SQL, con pequeñas modificaciones, para crear la base de datos Northwind  en MySQL. ¡Sí incluye los datos :D!

Sin más, aquí está el link al archivo:
Northwind para MySQL
Y el link al sitio en donde lo encontré(agradecer):
Taringa!, gracias juanmordan.

¡Saludos! @fferegrino :)

Practica 1 Bases de datos (:S)

Hola de nuevo, regresa el sinuoso trajín de la escuela y con el las prácticas y los proyectos.

Esta es mi implementación de una práctica "sencilla" de la asignatura Base de Datos, se trata de idear como vincular dos clases: Alumnos y Materias, esto de la forma que me mejor nos diera a entender Dios o nuestros conocimientos previos.

Hubieron varias sugerencias por parte del profesor pero yo me decanté por la que me pareció más sencilla; que es el uso de arreglos dentro de la clase principal para gestionar los objetos, vinculando cada materia con los alumnos que la cursan, también mediante el uso de un vector.

Una implementación vaga, pero que espero entiendas si lo bajas, cualquier duda por aquí o si tienes la desgracia de tenerme agregado en alguna red social o servicio de mensajería por ahí puedes preguntar.

Archivo:

Si me quieres comprar una cerveza, por favor que sea una indio xD

¡Saludos! @fferegrino :)