Comunidad PHPeros

Lenguajes => General => Mensaje iniciado por: DonMW. en 24 de Abril de 2012, 19:48:23 pm

Título: [Ayuda] Suscripciones en MySQL
Publicado por: DonMW. en 24 de Abril de 2012, 19:48:23 pm
Hola,

Soy nuevo en este foro, me llamo DonMW.
No vengo a pedir nada mascadito, quiero resolver mis dudas a partir de codigos que yo ya he creado y con la ayuda de vosotr@s.

Tengo un proyecto en mente, y quiero hacer una opcion de suscripcion a usuario, tipo YouTube.
Me atrevo a decir que se hacer lo que pido en PHP, lo que no se es como hacerlo en MySQL, no se que tabla hacer ni a que se refiere.

He pensado dos opciones:

1ª opcion:

Nombre de la tabla: suscripciones
Campos: id, id_user, id_suscrip

2ª opcion:

Nombre de la tablas: suscripciones y noticias_suscripciones
Campos (suscripciones): id, id_user, id_suscrip
Campos (noticias_suscripciones): id, usuario, noticia, fecha

----

Bien, en la primera opcion solo creo la tabla suscripciones y almaceno la id del usuario que se han suscribido y la id del usuario que se ha suscrito, cuando el que se han suscribido sube un video tiene que salir en todas las pantallas de los suscriptores, ¿forma de hacerlo?, ni idea...

En la segunda opcion creo la tabla suscripciones y la de noticias, lo mismo que en el primer paso pero cuando el usuario sube un video se almacena en noticias y hare una query para que todos los que lo sigan salgan en su pantalla.

Aqui mi duda, ... no tengo ni idea de como hacerlo. Es gastar MySQL a lo tonto en la 2ª opcion, asi que... ¿que me recomendais?.

Salu2!
Título: Re:[Ayuda] Suscripciones en MySQL
Publicado por: CarlosRdrz en 24 de Abril de 2012, 23:28:58 pm
Supongo que lo correcto sería la segunda opción.
Cuando alguien sube un vídeo, se mira que gente está suscrita a ese usuario en la tabla suscripciones.
Una ves se tiene a los usuarios suscritos, se añade una entrada a noticias_suscripciones con el nuevo vídeo para cada usuario (que sería la notificación)
Cuando él pulse en la notificación se elimina la entrada de la tabla noticias_suscripciones o se marca como leída, o lo que sea.

¿Donde ves el gasto a lo tonto?
MySQL está para eso.

Saludos!
Título: Re:[Ayuda] Suscripciones en MySQL
Publicado por: DonMW. en 25 de Abril de 2012, 18:57:39 pm
Supongo que lo correcto sería la segunda opción.
Cuando alguien sube un vídeo, se mira que gente está suscrita a ese usuario en la tabla suscripciones.
Una ves se tiene a los usuarios suscritos, se añade una entrada a noticias_suscripciones con el nuevo vídeo para cada usuario (que sería la notificación)
Cuando él pulse en la notificación se elimina la entrada de la tabla noticias_suscripciones o se marca como leída, o lo que sea.

¿Donde ves el gasto a lo tonto?
MySQL está para eso.

Saludos!
Para que no gaste muchos recursos.
Pero es que si lo tienen que ver 2 personas, como hago para que la persona que ya lo ha visto lo elimine, si lo elimina, la borra tambien para esa persona, a no ser que en la tabla noticia_suscripciones ponga id, id_user, id_susc y cada vez que suba un usuario un video si tiene 5 suscriptores inserte 5 datos con la misma id de user pero con 5 ids diferentes suscriptores.

Lo que quiero hacer es que no llegue un momento donde la BD haga: "Poff" y caiga por que no puede almacenar nada mas.
Tambien tengo en mente que cada mes los mensajes de noticias se autoborren automaticamente para no ocupar datos viejos en la db.

-----

En fin, quiero hacerlo de la manera que gaste 0,0000001 recursos y datos almacenados en la MySQL.
Puede ser una tonteria, pero pienso si YouTube lo hace asi.
Título: Re:[Ayuda] Suscripciones en MySQL
Publicado por: CarlosRdrz en 25 de Abril de 2012, 19:57:57 pm
Para que no gaste muchos recursos.
Pero es que si lo tienen que ver 2 personas, como hago para que la persona que ya lo ha visto lo elimine, si lo elimina, la borra tambien para esa persona, a no ser que en la tabla noticia_suscripciones ponga id, id_user, id_susc y cada vez que suba un usuario un video si tiene 5 suscriptores inserte 5 datos con la misma id de user pero con 5 ids diferentes suscriptores.

Lo que quiero hacer es que no llegue un momento donde la BD haga: "Poff" y caiga por que no puede almacenar nada mas.
Tambien tengo en mente que cada mes los mensajes de noticias se autoborren automaticamente para no ocupar datos viejos en la db.

-----

En fin, quiero hacerlo de la manera que gaste 0,0000001 recursos y datos almacenados en la MySQL.
Puede ser una tonteria, pero pienso si YouTube lo hace asi.

Con esta tabla: Campos (noticias_suscripciones): id, usuario, noticia, fecha
Pongamos que yo subo un vídeo y tengo dos suscriptores.
Se añadirían dos filas a la tabla noticias_suscripciones, una por cada suscrito.
El id sería el id de la notificación, y "usuario" sería el id del usuario notificado. En noticia el texto de notificación, y en fecha la fecha actual (para borrar entradas antiguas, como tu dices)
Cuando un usuario lee la notificación, borra su fila de la base de datos, pero no la de los demás ¿no?

Saludos!
Título: Re:[Ayuda] Suscripciones en MySQL
Publicado por: Animus en 25 de Abril de 2012, 20:50:54 pm
Claro, eso se llama estudio de optimización, tienes que encontrar la manera más ordenada y eficaz :P
Título: Re:[Ayuda] Suscripciones en MySQL
Publicado por: DonMW. en 25 de Abril de 2012, 23:26:36 pm
Muchas gracias Carlos por tu ayuda :)
Si es asi lo hare, pero me pregunto como lo hara YouTube, pero no... no quiero que se borre la notificacion. Eso se borraria cada mes o cada 2 meses, pero no se si hay algun modo, que por ejemplo, sin tener que crear tantas tablas.

Hay 4 tablas:
- usuarios
- videos
- suscriptores
- noticias_suscriptores

Entonces, los usuarios almacenan los usuarios, los videos los videos, marcamos las suscripciones y las noticias.
Creo que podriamos quitar las noticias_suscripciones si usamos "videos" como modo, lo que quiero decir.

Videos: id, user_id, usuario, title, descripcion, fecha, url, votos

Si me baso en esto, quiere decir que tambien puedo hacer que haga una consulta y que si ese usuario ha colgado un nuevo video y tu estas suscrito a el te salga esa alerta como si fuera un historial de videos subidos, pero tambien para los suscriptores y para informar solo sobre los videos que han subido las personas a las que siguen, ¿me equivoco?.

Muchas gracias por vuestras respuestas.
Título: Re:[Ayuda] Suscripciones en MySQL
Publicado por: CarlosRdrz en 27 de Abril de 2012, 17:44:27 pm
Muchas gracias Carlos por tu ayuda :)
Si es asi lo hare, pero me pregunto como lo hara YouTube, pero no... no quiero que se borre la notificacion. Eso se borraria cada mes o cada 2 meses, pero no se si hay algun modo, que por ejemplo, sin tener que crear tantas tablas.

Hay 4 tablas:
- usuarios
- videos
- suscriptores
- noticias_suscriptores

Entonces, los usuarios almacenan los usuarios, los videos los videos, marcamos las suscripciones y las noticias.
Creo que podriamos quitar las noticias_suscripciones si usamos "videos" como modo, lo que quiero decir.

Videos: id, user_id, usuario, title, descripcion, fecha, url, votos

Si me baso en esto, quiere decir que tambien puedo hacer que haga una consulta y que si ese usuario ha colgado un nuevo video y tu estas suscrito a el te salga esa alerta como si fuera un historial de videos subidos, pero tambien para los suscriptores y para informar solo sobre los videos que han subido las personas a las que siguen, ¿me equivoco?.

Muchas gracias por vuestras respuestas.

Sí, también podrías hacer eso. Simplemente mostrar los videos de las personas a las que estás suscrito, con un máximo de fecha.

Por cierto, ¿por qué en la tabla Videos: tienes user_id y usuario?
Con user_id deberías tener suficiente información para obtener el nick del usuario ¿no?

Saludos!
Título: Re:[Ayuda] Suscripciones en MySQL
Publicado por: DonMW. en 27 de Abril de 2012, 20:58:53 pm
Sí, también podrías hacer eso. Simplemente mostrar los videos de las personas a las que estás suscrito, con un máximo de fecha.

Por cierto, ¿por qué en la tabla Videos: tienes user_id y usuario?
Con user_id deberías tener suficiente información para obtener el nick del usuario ¿no?

Saludos!
Tienes razon, jaja.
Lo hare asi, y muchas gracias por tu ayuda, parece que el unico que ayuda aqui eres tu ;)

Salu2!