2012-06-26 12 views
5

Había hecho tres tablas.Seleccione donde no es igual a los valores múltiples de las claves de la matriz asociativa

Tabla1 = usuarios .Y los nombres de columna son ID de usuario (AUTO_INCREMENT) y nombre de usuario.
Table2 = hobbies. los nombres de las columnas son hobbyid (auto_increment) y hobbyname.
Table3 = users_hobbies. los nombres de columna son FK_userid y FK_hobbyid.

Ahora hobbyname tiene cricket, fútbol, ​​voleibol.
Durante el usuario de registro selecciona solo el cricket y el fútbol y lo guardo en $ _SESSION ['hobby_id'] matriz asociativa.

Pero en el perfil desea agregar más aficiones.

Así que quiero Mostrar una lista de pasatiempos que no son iguales a $ _SESSION ['hobby_id'].

Esto, por supuesto no funcionó:

foreach($_SESSION['hobby_id'] as $k=>$v) 
{ 

    $query="select hobbyid,hobbyname from hobbies where hobbyid!= $v"; 
} 
Output was football,volleyball and cricket,volleyball....but i wanted only volleyball 

así que quiero que

$query="select hobbyid,hobbyname from hobbies where hobbyid!=(multiple values of session hobby id)"; 

¿Qué código voy a tener que introducir para conseguir resultado deseado (sólo voleibol)?

Respuesta

2

eliminar foreach bucle y utilizar NOT IN comparación en MySQL:

$query=" 
    SELECT hobbyid,hobbyname 
    FROM hobbies 
    WHERE hobbyid NOT IN (" . implode(',', $_SESSION['hobby_id']) . ") 
"; 
+1

trabajó como un encanto .. no había problema cuando el $ _SESSION [ 'hobby_id'] estaba vacío pero lo resolvió mediante el uso simple si (empty ($ _ SESSION ['hobby_id'])) ...... ** gracias ** – Santosh

+0

Seguro que tiene que verificar si la variable no está vacía, solo le doy la consulta final. Pero debes asegurarte de que '$ _SESSION ['hobby_id']' contiene solo valores numéricos (de hecho, de inyección de SQL) – rabudde

Cuestiones relacionadas