Non posso che ringraziarti ulteriormente per il tempo che mi dedichi.
Effettivamente sono stato molto confusionario...
Inserisco più informazioni riguardanti il mio sistema, e riformulo la domanda.
- Clicca qui per la lista di tabelle e colonne utilizzate.
Quindi, spiego con precisione cosa voglio fare con la seconda query:
Codice PHP:
Select u.* , g.* , v.* , Count( messages.mp_read ) As tot_pm
/* Seleziona tutti i dati dell'utente, del gruppo a cui appartiene, i dati convalidazione, e conta il totale dei pm NON letti */
From users As u
/* Estrae i dati dell'utente */
Inner Join groups As g On ( g.group_id = u.user_group )
/* Estrai il gruppo a cui appartiene l'utente, utilizzo una INNER, dato che, voglio che non estragga nulla se il gruppo non esiste */
Left Join validations As v On ( v.validate_uid = u.user_id )
/* Estrae i dati di convalidazione, in genere la riga non esiste più nella tabella "validations" dopo la convalidazione, quindi utilizzo una LEFT */
Left Join mp As messages On ( messages.mp_read = 0 And messages.mp_receiver_id = u.user_id )
/* Questa LEFT la utilizzo per CONTARE solo i pm che appartengono all'utente in questione e che hanno il valore nel campo mp_read uguale a 0 ( ovvero i pm che non sono stati letti ) */
Where u.user_id = %d And u.user_pass = '%s' Limit 1;
/* Infine con questa riga voglio che la query in generale venga eseguita SOLO se l'user_id e la user_pass dell'utente sono corretti */
Invece WHERE non adempie alla sua funzione ( ovviamente so di essere io che sbaglia, però non capisco PERCHE' ), dato che se io eseguo questo codice, mysql_num_rows mi estrae una riga ( con elementi totalmente vuoti ), anche se l'id e la password non corrispondono a nessun utente nel database:
Codice PHP:
// Dati immaginari
$c_Userid = 9999; // Questo id non è presente nel database
$c_Password = "password_errata"; // Questa PWD è totalmente errata, non essendo neppure md5
$query = db_query( "Select u.* , g.* , v.* , Count( mp.mp_read ) As tot_pm
From nukebb_users As u
Inner Join nukebb_groups As g On ( g.group_id = u.user_group )
Left Join nukebb_validations As v On ( v.validate_uid = u.user_id )
Left Join nukebb_mp As mp On ( mp.pm_read = 0 And mp.mp_receiver_id = u.user_id )
Where u.user_id = %d And u.user_password = '%s' Limit 1;" , array( $c_Userid, $c_Password ) , __FILE__ , __LINE__ );
// Verifica se i dati dei cookie sono validi
if ( mysql_num_rows( $query ) == 1 )
{
$userSession = fetch_array( $query );
// Se l'utente deve ancora essere convalidato non viene presa in considerazione la sua sessione
if ( $userSession["validate_uid"] != "" )
{
unset( $userSession );
}
}
// Stampo i dati ottenuti in output:
print_r( $userSession );
Ottengo il seguente output:
codice:
Array
(
[user_id] =>
[user_nick] =>
[user_pass] =>
[user_email] =>
[user_group] =>
[group_id] =>
[group_name] =>
[group_desc] =>
[group_image] =>
[group_color] =>
[validate_uid] =>
[validate_key] =>
[validate_day] =>
[tot_pm] => 0
)
Preciso che se tolgo questa parte dalla query: , Count( mp.mp_read ) As tot_pm dalla query lasciando la LEFT, la query torna a funzionarmi bene, e il controllo tramite mysql_num_rows avviene correttamente.
Quindi cosa sbaglio?