¿Es posible hacer esto con PHP y MySQL?

  • Autor Autor xcodex
  • Fecha de inicio Fecha de inicio
X

xcodex

Hola!, primero quiero pedirles disculpas porque ultimamente estoy abriendo muchas consultas jaja, es que estoy en una estapa decisiva de un proyecto y necesito concretar unas cositas.

Ahora si, consulto..
Tengo una tabla con los registros de usuarios, y otra con lista de temas de interes.
Lo que necesitara saber es como puedo guardar en la BD todos los temas que le interesen a un usuario.
Por ejemplo: "A un usuario le interesa, ciencia, química y física". Se como se haría en la consulta PHP, pero no se como se haría en la BD.

No se si se entendió jajaja.
Agradezco todo tipo de sugerencias. 🙂
 
Pues, en la BD debes de tener una tabla usuarios, una tabla temas, y otra temas-usuario, con una relación de muchos a muchos (un usuario puede tener muchos temas de interés y un tema de interés puede ser parte de muchos usuarios).
 
Pues, en la BD debes de tener una tabla usuarios, una tabla temas, y otra temas-usuario, con una relación de muchos a muchos (un usuario puede tener muchos temas de interés y un tema de interés puede ser parte de muchos usuarios).

Entiendo el concepto, pero por ejemplo como puedo poner en un registro que un tema le interesa a muchos usuarios.
Poruqe por ejemplo, no puedo poner varios ide de usuario en un mismo registro.
 
Entiendo el concepto, pero por ejemplo como puedo poner en un registro que un tema le interesa a muchos usuarios.
Poruqe por ejemplo, no puedo poner varios ide de usuario en un mismo registro.
Por eso, en la tabla detalle: temas-usuarios (contiene el id de usuario y el id del tema).
 
Por eso, en la tabla detalle: temas-usuarios (contiene el id de usuario y el id del tema).

Por ejemplo, tabla temas-usuarios ¿sería así?:
- id
- id del tema
- id del usuario usuario que le interesa el tema
- fechayhora

y por cada "Me interesa" se agregaría un registro.
 
Por ejemplo, tabla temas-usuarios ¿sería así?:
- id
- id del tema
- id del usuario usuario que le interesa el tema
- fechayhora
Sí, no es necesario el ID. Tanto id del tema como id de usuario tienen que ser primary key. Después de ello, tienes que agregar los foreign keys a cada uno con la tabla usuario y temas.
 
Sí, no es necesario el ID. Tanto id del tema como id de usuario tienen que ser primary key. Después de ello, tienes que agregar los foreign keys a cada uno con la tabla usuario y temas.

Y no podría directamente agregar la información a la BD, sabiendo, ya que tendría el ID del usuario que puso "Me interesa" mediande $_SESSION y el ID del tema de interés también lo tendría.
 
Y no podría directamente agregar la información a la BD, sabiendo, ya que tendría el ID del usuario que puso "Me interesa" mediande $_SESSION y el ID del tema de interés también lo tendría.
Sí. Esa es la idea.
 
Entonces no necesitaría la clave foránea, cierto?
La seguirías necesitando. ¿Por qué? Porque estarías redundando datos (temas, usuarios) si los agregaras defrente a la tabla temas-usuarios, se haría muy pesado, por eso solo debe ir un entero no el nombre de un usuario o tema.
 
Puedes usar mysql workbench portable para crear el modelo relacional y para crear las consultas con Navicat 11.1.13 portable buscalo en google 😉
 
No des malas ideas jaja que aprenda a crear una buena base de datos!
Puedes usar mysql workbench portable para crear el modelo relacional y para crear las consultas con Navicat 11.1.13 portable buscalo en google 😉
 
Para optimizar tu consultas hazlo con JSON

ejemplo

id del usuario: 1

temas de interés [1,4,6,7,10]

- - - Actualizado - - -

Nota: mejorando un poco hazlo asi


ID de usuario: 1

ID de un tema en particular (Ciencias): 15

user_topics: [1,2,6,10,3,15]

topics_hots: { 'id': 15, 'marked_topic': 310 }

relacionalo y usa json decode para obtener los temas mas populares. una vez un usuario seleccione un tema de su interes

agrega al arrelo user_topics el id y agregar a
topics_hots ( marked_topic ++ 1 )

si un tema es señalado numerosas veces sera contado, posteriormente puedes mostrarlo formateando el estilo como usuarios con ese tema en interes o simplemente usarlo como registro para organizar los temas populares. ETC
 
Para optimizar tu consultas hazlo con JSON

ejemplo

id del usuario: 1

temas de interés [1,4,6,7,10]
Es una gran alternativa. Sin embargo, las base de datos NoSQL no siempre cumplen con el ACID ni tienen estandarización, ni tampoco un soporte maduro como SQL. Pero igual es algo a tener en cuenta en el repertorio.
 
Para optimizar tu consultas hazlo con JSON

ejemplo

id del usuario: 1

temas de interés [1,4,6,7,10]

- - - Actualizado - - -

Nota: mejorando un poco hazlo asi


ID de usuario: 1

ID de un tema en particular (Ciencias): 15

user_topics: [1,2,6,10,3,15]

topics_hots: { 'id': 15, 'marked_topic': 310 }

relacionalo y usa json decode para obtener los temas mas populares. una vez un usuario seleccione un tema de su interes

agrega al arrelo user_topics el id y agregar a
topics_hots ( marked_topic ++ 1 )

si un tema es señalado numerosas veces sera contado, posteriormente puedes mostrarlo formateando el estilo como usuarios con ese tema en interes o simplemente usarlo como registro para organizar los temas populares. ETC

Gracias por la idea, pero recién estoy empezando a dominar MySQL, todavía no me meto en NOSQL jajaja

- - - Actualizado - - -

La seguirías necesitando. ¿Por qué? Porque estarías redundando datos (temas, usuarios) si los agregaras defrente a la tabla temas-usuarios, se haría muy pesado, por eso solo debe ir un entero no el nombre de un usuario o tema.

OOOH BROTHER!! ya comprendí, eres crackisimo!!!! muchas gracias por la paciencia.
 
La mejor opción es la que te han recomendado de una tabla intermedia, pero también podrías crear un campo adicional en la tabla usuarios y guardar en formato json los temas de interés.
 
Atrás
Arriba