Obtener todos los favoritos del usuario actual

Tengo una tabla en la base de datos llamada "favoritos" con 3 columnas (user_id, bookmarked_song_id, bookmark_tag) y quiero obtener todos los Bookmarked_song_id para el usuario actual.

 $username = $this->session->userdata('username');
 $uidq = mysql_query('SELECT user_id FROM users WHERE username="' . $username . '"');
 $rq = mysql_fetch_assoc($uidq);
 $user_id = $rq['user_id'];
 $getfavq = mysql_query("SELECT * FROM favorites WHERE user_id=$user_id");
 $favsr = mysql_fetch_array($getfavq); //contains all the information from the favorites database where user_id is the user_of the currently logged-in user

Y no sé qué usar a continuación... Quiero tener algo como:

foreach($favsr['bookmarked_song_id'] as $song_id) {
$getsongq = mysql_query("SELECT * FROM songs WHERE song_id=$song_id");
$getsongr = mysql_fetch_assoc($getsongq);
$singer = $getsongr['singer'];
$song_name = $getsongr['song_name'];}

Obviamente, el método es incorrecto porque obtengo: "Argumento no válido suministrado para foreach ()". ¿Alguien puede ayudarme a conseguir las canciones? Gracias por adelantado.

preguntado el 22 de mayo de 12 a las 19:05

3 Respuestas

Debería ser esto:

$favsr = mysql_fetch_array($getfavq, MYSQL_ASSOC);
foreach($favsr as $row) {
    $songid = $row['bookmarked_song_id'];
     ...
}

contestado el 22 de mayo de 12 a las 19:05

mysql_fetch_array solo carga una fila, debería ser así

$getfavq = mysql_query("SELECT * FROM favorites WHERE user_id=$user_id");
while $favsr = mysql_fetch_array($getfavq); 
    {$songid=$favsr['bookmarked_song_id'];
    $getsongq = mysql_query("SELECT * FROM songs WHERE song_id=$song_id");
    $getsongr = mysql_fetch_array($getsongq);
    $singer = $getsongr['singer'];
    $song_name = $getsongr['song_name'];}

contestado el 22 de mayo de 12 a las 19:05

Tienes esto etiquetado con codeigniter. Si está creando una aplicación CodeIgniter, probablemente debería usar la biblioteca de base de datos de CI:

$username = $this->session->userdata('username');

//Select your user
$this->db->select('user_id');
$this->db->where('username', $username);
$this->db->limit(1);
$user_query = $this->db->get('users');

if($user_query->num_rows() > 0)
{
    // We found a user
    $user = $user_query->row(); // select a single row

    // Grab this user's favorites
    $this->db->where('user_id', $user->id);
    $favorites_query = $this->db->get('favorites');

    $songs = $favorites_query->result();

    if($songs)
    {
        foreach($songs as $song)
        {
            $song_id = $song->bookmarked_song_id;
            $tag = $song->bookmark_tag;

            // Do stuff with data.
        }
    }
    else
    {
        // No songs/favorites found, catch error
    }

}
else
{
    // No such user found, catch error
}

Por supuesto, la mejor práctica es tener sus datos de usuario y sus datos favoritos en modelos separados, pero esto debería funcionar por ahora.

contestado el 22 de mayo de 12 a las 21:05

Sí, estoy usando Codeigniter, por lo que su respuesta encaja perfectamente en mi proyecto. Solo estaba escribiendo la idea principal y, después de eso, probablemente la transformaría en un código de estilo Codeigniter. - dpanayotov

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.