Foros del Web » Programando para Internet » PHP »

Como recuperar datos para una aplicacion con php y mysql

Estas en el tema de Como recuperar datos para una aplicacion con php y mysql en el foro de PHP en Foros del Web. ¡Hola a todos amigos! Le tengo una consulta, tal vez para ustedes sea algo simple pero no consigo hacer que funcione la app que estoy ...
  #1 (permalink)  
Antiguo 05/02/2015, 00:38
 
Fecha de Ingreso: noviembre-2014
Mensajes: 4
Antigüedad: 9 años, 5 meses
Puntos: 0
Como recuperar datos para una aplicacion con php y mysql

¡Hola a todos amigos!
Le tengo una consulta, tal vez para ustedes sea algo simple pero no consigo hacer que funcione la app que estoy desarrollando.
La aplicación deberia permitir a diferentes usuarios que creen su cuenta, agregar, borrar y obtener recomendaciones de urls que puedan serles de utilidad. Esta practicamente terminada, sin embargo tengo problemas con el codigo para recomendar las urls.
La recomendacion se haria a personas que tienen como minimo una url en comun en su cuenta con otra persona, pero solo se le mostrarian las urls que no tienen en comun, aquellas que la persona que solicito la recomendacion no tiene en su propia cuenta... esto es para no mostrarle las urls que ya tiene.

Lo que hago es hacer una consulta sql para conseguir los usuarios que tienen marcadores en comun...
Código PHP:
Ver original
  1. // ESTO ME SOLICITA LOS USUARIOS:
  2.  
  3. $consulta = "SELECT distinct(b2.username) FROM bookmark AS b1, bookmark AS b2 WHERE b1.username = '$username' AND b1.username != b2.username AND b1.bm_url = b2.bm_url";
  4. $ejecutar_consulta = $conexion->query($consulta);
  5.  
  6. // RECUPERO LOS USUARIOS A TRAVES DEL BUCLE WHILE:
  7.  
  8. while ($registro = $ejecutar_consulta->fetch_assoc())
  9. {
  10.     $usuarios = $registro["username"];
  11.            
  12. // HAGO UNA SEGUNDA CONSULTA PARA OBTENER LAS URLS DE TODOS LOS USUARIOS QUE TIENEN URLS EN COMUN CON EL USUARIO QUE LAS SOLICITO:
  13.            
  14.     $consulta_uno = "SELECT bm_url FROM bookmark WHERE username = '$usuarios'";
  15.     $ejecutar_consulta_uno = $conexion->query($consulta_uno);
  16.            
  17. // RECUPERO LAS URLS CON EL BUCLE WHILE:
  18.  
  19.         while ($registro_uno = $ejecutar_consulta_uno->fetch_assoc())
  20.     {
  21.         $bm_url = $registro_uno["bm_url"];
  22.         echo $bm_url."<br/>";
  23.     }
  24. }

Hasta ahi todo esta bien solo que me muestra todos los marcadores que no tienen en comun asi como tambien los que tienen en comun.
Quise hacer una tercer consulta para obtener las urls que tiene el usuario que solicito la recomendacion pero no se como hacerlo... de verdad que les agradeceria si pudieran ayudarme. Hace un par de noches que me quedo hasta tarde sin conseguir resultados.
  #2 (permalink)  
Antiguo 05/02/2015, 06:34
 
Fecha de Ingreso: mayo-2013
Mensajes: 171
Antigüedad: 11 años
Puntos: 4
Respuesta: Como recuperar datos para una aplicacion con php y mysql

No entiendo muy bien como diferencias los que tienen en comun de los demas...
Porque yo veo que solo buscas los valores de bm_url para username = $usuarios
  #3 (permalink)  
Antiguo 05/02/2015, 15:19
 
Fecha de Ingreso: noviembre-2014
Mensajes: 4
Antigüedad: 9 años, 5 meses
Puntos: 0
Respuesta: Como recuperar datos para una aplicacion con php y mysql

Hola migue_coco!

Como $usuarios esta en el bucle ira pasando los distintos usuarios por la consulta. Hasta ahi va bien. Me parece que entre las dos consultas, la que solicita los usuarios y la que solicita las urls deberia ir una consulta mas que pida las urls que ya tiene el usuario que pidio la recomendacion para poder en la tercer consulta quitar todas las urls que tiene asociadas ese usuario. Con eso ya se quitaria las urls del usuario. Pero no se como hacer eso porque necesito agregar un bucle para recuperar cada url pero si so embebo en otro bucle me arroja valores repetidos.
  #4 (permalink)  
Antiguo 05/02/2015, 15:30
 
Fecha de Ingreso: mayo-2013
Mensajes: 171
Antigüedad: 11 años
Puntos: 4
Respuesta: Como recuperar datos para una aplicacion con php y mysql

Vale, creo que voy entendiendo.

Una cosa mas, la estructura de la base de datos.
Cuando pides las url, el campo se llama bm_url.
Ese campo guarda una sola url? Es decir, un usuario solo puede guardar una unica url?
En el caso de poder guardar mas de una, se guarda dentro del mismo campo?
Si se guarda en otro campo, como se llama ese campo?

Porque a fin de cuentas, lo unico que tienes que decirle a la BDD es que te de las que sean distintas a las del usuario.
Vamos a suponer que solo hay un campo con una unica url

Código PHP:
$usuario $_COOKIE['usuario'];

//Buscas la url de ese usuario
$sql="SELECT campo_url FROM tabla WHERE Usuario = '$usuario'";
$result =...;
$row mysql_fetch_assoc($result);

//Despues, cuando solicitas las URL de todos
$consulta_uno "SELECT bm_url FROM bookmark WHERE username = '$usuarios'";

//Añade esto
$consulta_uno "SELECT bm_url FROM bookmark WHERE username = '$usuarios' AND bm_url != '".$row['campo_url']."'"
Pero como te digo, este codigo cambia dependiendo de lo que te he preguntado al principio.

Algo asi es lo que quieres, no?
  #5 (permalink)  
Antiguo 06/02/2015, 00:57
 
Fecha de Ingreso: noviembre-2014
Mensajes: 4
Antigüedad: 9 años, 5 meses
Puntos: 0
Respuesta: Como recuperar datos para una aplicacion con php y mysql

Gracias por tu ayuda migue_coco,

Te contesto tus preguntas...

Cada usuario puede guardar la cantidad de urls que quiera, no hay limites. Se guardan todos en el campo bm_url.

El problema mas grande, me parece, es que cada consulta para recuperar los datos tiene que pasar por un bucle.

La ultima consulta...

Código PHP:
Ver original
  1. $consulta_uno = "SELECT bm_url FROM bookmark WHERE username = '$usuarios' AND bm_url != '".$row['campo_url']."'";

... tiene que imprimir en pantalla las urls de todos los usuarios, pero solo las que sean diferentes de todas las urls del usuario que las pide. No consigo hacer que a cada usuario que fué seleccionado en la primer consulta...

Código PHP:
Ver original
  1. $consulta = "SELECT distinct(b2.username) FROM bookmark AS b1, bookmark AS b2 WHERE b1.username = '$username' AND b1.username != b2.username AND b1.bm_url = b2.bm_url";

... se le revise cada url para saber si es igual o diferente a las urls del usuario que las pide y mostrar solo las que son diferentes.

Puedo traer las urls del usuario que pide la recomendacion, e incluso los usuarios que tienen urls que coinciden con las urls del usuario que las pide, mostrar todas las urls de todos los usuarios, pero no consigo quitar las urls que coinciden.
  #6 (permalink)  
Antiguo 06/02/2015, 05:28
 
Fecha de Ingreso: mayo-2013
Mensajes: 171
Antigüedad: 11 años
Puntos: 4
Respuesta: Como recuperar datos para una aplicacion con php y mysql

Vale, por eso decia que el codigo cambiaria si almacenas mas de una url.
Entonces debes hacer un explode al campo de la url del usuario que solicita.

Por si desconoces la funcion, lo que hace es dividir la cadena entera del campo url en cada uno de los valores que hay almacenados, de acuerdo a un separador.

Vamos a suponer que en tu tabla, las url van separadas por una coma ','.
Cuando haces el SELECT del usuario, debes introducir tambien el campo de la url:

Código PHP:
    $consulta "SELECT bm_url, distinct(b2.username) FROM bookmark AS b1, bookmark AS b2 WHERE b1.username = '$username' AND b1.username != b2.username AND b1.bm_url = b2.bm_url"
Despues, vamos a introducir el explode:

Código PHP:
//Debajo de la consulta anterior
$result = ...
$row mysql_fetch_assoc($result);

//Ahora el explode
$cadena $row['bm_url'];
$cadena_array=explode(',',$cadena);
foreach(
$cadena_array as $llave => $valores)

//Despues lo metemos como condicionante en la consulta:
$consulta_uno "SELECT bm_url FROM bookmark WHERE username = '$usuarios' AND bm_url != '$valores'"
Algo asi creo que podria ser.
Lo acabo de hacer en 3 minutos, seguramente exista algun fallo, es una idea.
Mira a ver mas o menos algo asi, lee sobre la funcion explode e intenta implementarlo a ver si te sirve.

Pero esa es la idea.

Si las url en vez de separadas por coma, van por espacio, por un guion o lo que sea, cambia aqui:

$cadena_array=explode(',',$cadena);

La coma por lo que sea si es un guion quedaria asi:

$cadena_array=explode('-',$cadena);

Etiquetas: Ninguno
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 18:13.