Foros del Web » Programando para Internet » PHP »

[SOLUCIONADO] Atasco con PHP/MySQLi

Estas en el tema de Atasco con PHP/MySQLi en el foro de PHP en Foros del Web. Presentación Hola! Soy nuevo en el foro, aunque llevo bastante tiempo visitando esta página , y he podido ver que hay usuarios que son realmente ...
  #1 (permalink)  
Antiguo 10/02/2016, 11:20
Avatar de dobleamarilla  
Fecha de Ingreso: febrero-2016
Ubicación: Barcelona
Mensajes: 2
Antigüedad: 8 años, 2 meses
Puntos: 0
Pregunta Atasco con PHP/MySQLi

Presentación

Hola! Soy nuevo en el foro, aunque llevo bastante tiempo visitando esta página , y he podido ver que hay usuarios que son realmente programadores muy buenos. Yo tengo conocimientos muy básicos de programación, y en estos momentos estoy diseñando una web por mi cuenta.

Creo este post para pedir ayuda a alguien que se maneje mejor que yo en este mundo y me oriente un poco para salir de un atasco en el diseño de mi página web (no pido que me lo den hecho! sólo que me digan por donde puedo tirar jeje).

Contexto

Os comento. Estoy trabajando con PHP, javaScript y MySQL. Tengo un bloque en la web que se trata de una especie de carrusel de imágenes y que abajo de este hay dos botones: Aceptar y Rechazar (cada imagen representa otro usuario cargado con un ID desde PHP). Si se acepta, se envía con una función AJAX información a la base de datos, en particular a una tabla llamada meGustan. Agrego que al hacer clic en Aceptar o Rechazar carga otro usuario con su imagen correspondiente. La estructura de esta tabla es la siguiente:
meGustan: ID (clave primaria) - ID_RULETA (este es el ID del usuario que aparece en el carrusel). Por lo tanto, si el usuario de la sesión (por ej. id = 10) acepta al usuario de la imagen (por ej. id_ruleta = 15) se añade una nueva fila en la tabla MeGustan:

id: 10, id_ruleta: 15.

Si has llegado hasta aquí me imagino que ya sabrás de que va la temática de la web .

Bueno, aquí viene uno de los problemas, aunque este es inevitable: cada usuario sesión aceptará a MUCHOS usuarios del carrusel, y cada aceptación o "megusta" implica tener una nueva fila en la tabla MeGustan y, en definitiva, con muchos usuarios esto crearía un problema de memoria/rendimiento.

El otro problema (en consecuencia del anterior) y un requisito indispensable, es que no se pueden repetir los mismos usuarios (a los que ya he aceptado) en el carrusel. Es decir, si yo le he dado a me gusta a fulanita, fulanita no puede volver a aparecerme en el carrusel.

A mi sólo se me ocurre obtener un array de todos los usuarios a los que les he dado "megusta" al cargar la página, e inventarme algún método con bucles para preparar un string/consulta SQL con tantas condiciones como usuarios haya dado a "megusta", para que MySQL me devuelva otro usuario que cumpla con los requisitos (que no le haya dado a me gusta antes). Es la única solución que he encontrado, pero creo que es muy bestia hacer algo como:

Código PHP:
$sql "SELECT id FROM usuarios WHERE id != c AND id != d AND ..."
Y poner un AND por cada usuario al que le haya dado "megusta"...

Resumen

Necesito obtener de la BD un usuario que NO aparezca en una matriz/array de muchas posiciones, y sólo se me ocurre hacerlo de una manera poco eficiente.

Cualquier idea que tengáis es bienvenida .

Muchas gracias por la atención, saludos!
  #2 (permalink)  
Antiguo 10/02/2016, 11:38
Avatar de stone_neo  
Fecha de Ingreso: abril-2004
Ubicación: Peru
Mensajes: 438
Antigüedad: 20 años
Puntos: 15
Respuesta: Atasco con PHP/MySQLi

Y si creas una tabla usuario_megusta que tenga como llave primaria a los campos id_usuario e id_usuario_megusta, en donde id_usuario = Id del usuario que esta viendo la ruleta y el id_usuario_megusta=Id del usuario que te gusta de la ruleta.

Si deseas obtener todos los usuarios que te gustan haces

Código SQL:
Ver original
  1. SELECT id_usuario_megusta FROM usuario_megusta WHERE id_usuario = #tu_id#

Y si deseas obtener los usuario que no te gustan aun podrias hacer algo asi, suponiendo que tus usuarios se guardan en la tabla usuario

Código SQL:
Ver original
  1. SELECT u.id_usuario
  2.    FROM usuario u
  3. WHERE NOT EXISTS (SELECT id_usuario_megusta FROM usuario_megusta m WHERE   m.id_usuario = u.id_usuario);

Algo asi podrias intentar, ve si te puede servir algo esta idea.

Saludos
__________________
Rubén Darío Huamaní Ucharima
Web : http://www.gorilla-soft.com
Usuario Linux #382 100 :-)
  #3 (permalink)  
Antiguo 10/02/2016, 13:16
Avatar de dobleamarilla  
Fecha de Ingreso: febrero-2016
Ubicación: Barcelona
Mensajes: 2
Antigüedad: 8 años, 2 meses
Puntos: 0
De acuerdo Respuesta: Atasco con PHP/MySQLi

Hostia pues no lo había visto así. La solución es perfecta

Estaba obsesionado con el tema de que sólo me devuelva un usuario y no había pensado en que se pueden obtener todos a la vez. Y lo de la subconsulta... me hubiese tirado la vida para ver eso jajaja. Muchas gracias! Lo marco como solucionado.

Etiquetas: mysql, select, sql, tabla, usuarios
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 09:29.