Mysql - left join

huck

Nuovo Utente
7 Ott 2004
11
0
0
Salve a tutti, spiego in sintesi il problema:

tabella 1 "utente"
------------
IDUtente
Nome
RIDRegione


tabella 2 "regione"
------------
IDRgione
Regione


Ho utilizzato la seguente query:

SELECT r.Regione, count( u.RIDRegione ) AS totale
FROM utente AS u LEFT JOIN regione AS r ON u.RIDRegione = r.IDRegione
WHERE u.IDUtente >1
GROUP BY `RIDRegione`
ORDER BY totale DESC


Vorrei visualizzare tutte le regioni, con accanto il numero totale di relativi iscritti. Sono riuscito a visualizzare solo le regioni che hanno occorrenza nella tabella "utente", ma non riesco a visualizzare le restanti regioni con accanto 0 come risultato.
Potete aiutarmi?

Grazie in anticipo
 

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.046
150
63
PR
www.borgo-italia.it
ciao
sarà perchè non amo molto le join (ne implicite ne esplicite) in quanto quasi sempre mi incasino.
ti do un suggerimento (sensa join)

PHP:
<?php
//............
$query_1="SELECT * FROM regione ORDER BY Regione";//query sulle regioni
$result_1=mysql_query($query_1);
while($regione=mysql_fetch_array($result_1)){
	$id_r=$regione['IDRegione'];
	$no_r=$regione['Regione'];
	$query_2="SELECT IDUtente FROM utente WHERE IDUtente='".$id_r."'";//query sugli utenti
	$numero=mysql_num_rows($query_2);//numero di utenti, 0 se non esistono
	/*se metti tutto in un array con chiave= no_r e valore= numero poi con sort()...
	puoi ordinare la visualizzazione come vuoi */
	echo "nella regione: $no_r ho $numero utenti<br>";
}//fine while
//ecc......
?>
 

huck

Nuovo Utente
7 Ott 2004
11
0
0
Grazie della tua attenzione.
In realtà mi ero impuntanto di imparare una volta per tutte ad utilizzare di più le query; inoltre, non avevo menzionato l'esigenza di visualizzare le regioni in ordine di registrazioni.

Es.
Piemonte 50
Lombardia 34
Sicilia 12
......
.......
 

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.046
150
63
PR
www.borgo-italia.it
ciao
guarda che lo script fa proprio quello

Piemonte 50
Lombardia 34
Sicilia 12
......
.......
cioè scrive il numero della regione e vicino il numero di iscritti della regione, io intendevo l'ordinamento per ordine alfabetico per nome regione (chiave con ksort) o per numero di iscritti (value con sort)
 

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.046
150
63
PR
www.borgo-italia.it
scusa ho avuto dei problemi prima di finire di scrivere, questo è quello che intendevo
PHP:
<?php 
//............ 
$query_1="SELECT * FROM regione ORDER BY Regione";//query sulle regioni 
$result_1=mysql_query($query_1); 
while($regione=mysql_fetch_array($result_1)){ 
    $id_r=$regione['IDRegione']; 
    $no_r=$regione['Regione']; 
    $query_2="SELECT IDUtente FROM utente WHERE IDUtente='".$id_r."'";//query sugli utenti 
    $numero=mysql_num_rows($query_2);//numero di utenti, 0 se non esistono 
    /*metti tutto in un array con chiave= no_r e valore= numero poi con sort()... 
    puoi ordinare la visualizzazione come vuoi */ 
    $visualizza[$no_r]=$numero;
}//fine while 
//ordine crescente per valore (per decrescente arsort())
$visualizza=asort($visualizza);
/*
ordine crescente per chiave ksort() (decrescente krsort())
$visualizza=ksort($visualizza);
*/
//stampa
foreach($visualizza as $regione => $iscritti){
	echo "$regione  $iscritti<br>";
}

//ecc...... 
?>
l'ordinamento per valore ti da

Veneto 55
Piemonte 50
Lombardia 34
Sicilia 12
......
.......
Abruzzo 0
quello per chiave
Abruzzo 0
...........
Lombardia 34
Piemonte 50
........
Sicilia 12
......
Veneto 55
 
Ultima modifica:

huck

Nuovo Utente
7 Ott 2004
11
0
0
grazie, hai ragione, alla fine farò così, ma mi rimarrà sempre il solito dubbio: era più veloce far tutto con una query o fare così?

Ciao e grazie
 

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.046
150
63
PR
www.borgo-italia.it
ciao
per vedere (una volta fatta la join) non ti resta che provare


PHP:
$start=microtime();//millisecondi

//le query di un tipo e poi lo stesso con l'altro tipo

$end=microtime();

$tempo_esecuzione=$end-$start;
 

huck

Nuovo Utente
7 Ott 2004
11
0
0
ciao
per vedere (una volta fatta la join) non ti resta che provare


PHP:
$start=microtime();//millisecondi

//le query di un tipo e poi lo stesso con l'altro tipo

$end=microtime();

$tempo_esecuzione=$end-$start;


A posto, la query giusta è questa:

SELECT r.Regione AS reg, count( u.RIDRegione ) AS totale
FROM utente AS u
RIGHT JOIN regione AS r ON u.RIDRegione = r.IDRegione
WHERE r.Regione != 'Non definita'
GROUP BY `Regione`
ORDER BY totale DESC

Grazie del tuo aiuto, proverò comunque a testare i tempi, ma credo che la cosa migliore sia usare direttamente mysql.
Grazie ancora
 
Discussioni simili
Autore Titolo Forum Risposte Data
F [MySQL] Problema con LEFT JOIN MySQL 6
P [MySQL] Inner Join o Left Join MySQL 14
K form Inserimento record mysql PHP 2
P Mysql lento a cancellare MySQL 1
P Codifica caratteri speciali mysql php PHP 0
N MAX() + ADD_DATE - per update su Mysql MySQL 0
F Applicazione PHP/MySQL per prenotazioni: limitare il numero massimo di posti prenotabili PHP 20
L tipo boolean non funzionante su mariadb (mysql). E codice php 7.4. PHP 0
M PHP/MySQL - Estrarre valori min e max di ogni gruppo PHP 5
W MySQL ciclo in SELECT MySQL 0
L Mysql gestionale multipiattaforma MySQL 0
W MySQL SELECT list dinamica MySQL 0
M utilizzo mysql in nodejs - crea createdAt e updateAt MySQL 1
T colonne di tabelle mysql ordinate MySQL 0
M Sintassi "personalizzata" per mysql workbench? MySQL 0
A Mysql MySQL 0
F Ricreare struttura php+mysql su Xampp Apache 0
M Array associativi php su 2 campi mysql PHP 10
Z Controllo giorni MYSQL PHP 0
L php mysql non salva solo id PHP 21
L php mysql cerca e visualizza pagina PHP 0
L Mysql: Nascondere le pagine dopo una ricerca PHP 1
R Aggiornare record mysql con Ajax, jQuery e php Ajax 2
S problema con recupero dati tabella mysql PHP 2
E Progressbar estrazione dati da tabella mySQL Ajax 9
Z MySql injection PHP PHP 1
D controllare valore in tabella mysql PHP 0
A pulsante di update campo mysql con javascript Javascript 2
R Tutto su utf-8 ma ancora problemi con i caratteri speciali in mysql MySQL 1
T differenza fra mysql xampp e un mysql server Database 0
R Importazione csv su mysql tramite array PHP 2
Z Problema con INT MySQL PHP 1
Z Problema database MySQL con XAMPP PHP 0
D problema php mysql PHP 1
D problema php mysql PHP 1
N Server mysql non raggiungibile da connessione esterna MySQL 1
B Crea pdf da tabella mysql "ultima riga modificata" MySQL 4
D evitare di inserirre duplicati in mysql PHP 4
L salvare codice html in mysql PHP 3
L Google chart php mysql PHP 2
S Gestire scelta dropdown con dati da Mysql PHP 2
K cron job mysql PHP 3
elpirata Query per leggere dati da una tabella mysql e mostrarli a video in base a parametri passati tramite GET PHP 5
R Errore UPDATE tabella mysql PHP 1
R Caricamento immagine su cartella remota + mysql PHP 3
D Emoji in mysql Database 0
L Aiuto per programma web php/mySQL PHP 2
S Problema esportazione tabelle Mysql in Excel PHP 0
S Cancellare una riga MYSQL PHP 1
L Ricerca valore mysql e incremento PHP 73

Discussioni simili