uso del JOIN?

  • Creatore Discussione Creatore Discussione Monital
  • Data di inizio Data di inizio

Monital

Utente Attivo
15 Apr 2009
778
2
18
Buongiorno a tutti, Rieccomi qua con un altro problemino,

dopo aver quasi superato un grande ostacolo quale l'array rieccomi su una materia un pò ostica per me cioè l'uso del join che hos empre evitato ma che ora non posso più.

Spiego il mio problema:

ho ad esempio la tabella principale strutturata cosi

IDtotale idnome idcognome ETA CITTA
1_________2_______10_____20_ Bari
2__________3_______6____ 33 Napoli
..etc...
ed un altra tabella cosi strutturata

IDname name
1 Gerry
2 Mike
3 Paolo
4 Francesco
5 Domenico
6 Bonolis
7 Scotti
8 Conti
9 Fiorello
10 Bongiorno

quindi in sostanza la tabella principale diverebbe

IDtotale idnome idcognome ETA CITTA
1_________Mike__Bongiorno_20_ Bari
2________Paolo____Bonolis 33 Napoli

ora semplicemente io vorrei in qualche maniera o creare una nuova tabelladove associo all'IDtotale della tabella pricncipale ll'intero nome del personaggio

tipo all'IDtotale 2 deve corrispondere Paolo Bonolis.

quindi avere una terza tabella
ID Nome
2 Paolo bonolis

quindi ID deve corrispondere ad IDtotale

qualcuno ha qualche idea sul come procedere

sono un pò a corto sopratutto eprchè sono certo che va usato JOIN

ah dimenticavo
questa tabella contine circa 20.000 nomi quindi se dovessi procedere alla creazine di una terza tabella dove uso lo stesso id mi servirà sicuramente unos cript che estrae tutti inomi e cognomi e li associa la nuovo id

grazie
 
ciao
se hai le due tabelle "principale" e "altra" e queste sono correlate, da quello che capisco tramite IDname - idnome, non devi fare una terza tabella,
perdersti le propietà relazionali di mysql.
ma come hai detto devi fare un join
es. se devi fare una select

SELECT * FROM principale AS pr, altra AS al WHERE pr.IDname = al.idnome [io generalmente uso questo tipo di scrittura]

oppure mettendo esplicitamente la clausola JOIN

SELECT * FROM principale AS pr JOIN altra AS al ON pr.IDname = al.idnome

se nella prima devi mettere altre opzioni al WHERE fai come le select usuali, alla seconda devi aggiungere la clausola WHERE.
comunque operando come fai con le select senza join.
es per estrarre tutti con età > 20

SELECT * FROM principale AS pr, altra AS al WHERE pr.ETA > 20

per la precisione quelle sopra si chiamano inner join
 
ok

grazie borgo sto iniziandoa capire il concetto ma la vedo difficile un pochino quindi visto che posso evitare la terza tabella ti spiego meglio cosa devo fare,perchè forse te l'ho spiegato al contrario, e ti sarei grato se a mò di esempio mi spieghi eprlomeno il concetto dato che dovrò usare spesso sto sistema con il nuovo database che ho.

Ora ho le idee un pò più chiare su come procedere quindi spiego meglio

allora da un file diciamo che io ho un iperlink Paolo Bonolis cliccando su questo link deve inanzitutto dividermi le due parole in Paolo ed in Bonolis e poi cercarmi la riga nella tabella "principale" dove idname=Paolo e idcognome=Bonolis e ricavarmi l'ID di quella riga.
Questo eprchè nella tabella principale potrebbe esserci anche idname=Antonio e id cognome=Bonolis)

poi da questo ID devo andare sulla tabella "altra" e ricavare altri dati(ad esempio idcitta) e cosi via

Come mi consigli di procedere ovviamente usando il JOIN?
 
Sei un grande Borgo

Ho provato la sintassi e funziona a meraviglia

GRAZIE GRAZIE GRAZIE.
 
ciao
stavo per rispondere al tuo precedente, quando ho visto che hai risolto
alla prossima


nono ho risolto l'estrazione dati con il join ma non ho ancora risolto su come risolvere il mio quesito


allora da una pagina web diciamo che io ho un iperlink Paolo Bonolis cliccando su questo link deve inanzitutto dividermi le due parole in Paolo ed in Bonolis e poi cercarmi la riga nella tabella "principale" dove idname=Paolo e idcognome=Bonolis e ricavarmi l'ID di quella riga.
Questo eprchè nella tabella principale potrebbe esserci anche idname=Antonio e id cognome=Bonolis)

poi da questo ID devo andare sulla tabella "altra" e ricavare altri dati(ad esempio idcitta) e cosi via

Come mi consigli di procedere ovviamente usando il JOIN?

thank
 
ciao
suppongo che tu abbia un link tipo:
pinco_pallo.php?pallino="Paolo Bonolis", e nella pagina pico_pallino.php recuperi la query con un get

$nome=$_GET['pallino']
giusto?
se è così e se il nome è separato dal cognome da uno spazio puoi separare il nome dal cognome con un explode es.

PHP:
$nome=$_GET['pallino']
$expl=explode(" ",$nome);//esplode rispetto allo spazio
//per capirsi ti metto due echo
echo $expl[0];//uotput Paolo
echo $expl[1];//uotput Bonolis
il problema dipende però da come sono separati e costruiti i nomi se ad es paolo bonolis non si chiamasse paolo ma Francesco Maria Bonolis l'explode dividerebbe la querystringa in tre.
analogo se si chiamasse Paolo De Bonolis
quindi molte cose, capisci, dipendono da come è costruita la stringa col nome e cognome.
se il nome e il cognome sono parole UNICHE e se sono SEMPRE e SOLO separate da uno spazio puoi adottare l'explode, altrimenti diventa un ca..no

detto questo e da quanto ho capito dalle tabelle che hai postato tu vuoi ottenere un output reletivo alla querystringa Paolo Bonolis una cosa del genere
2________Paolo____Bonolis 33 Napoli
se è così credo che non ti basti una semplice join in quanto prima devi ricavarti gli id relativi a paolo e quello bonolis, fatto questo allora pui fare una join tra la principale e l'altra per ottenre detto output.
comunque ci penso un momento e, spero, di saperti dire
 
eh si in pratica potrebbe capitare di avere

2________Francesco Paolo____Bonolis 33 Napoli

In pratica io sto ancora pensando come fare per pescare i risultati eprchè dovrei avere una lista in una pagina php con i dati per esempio di tutti quelli di Napoli con il solo nome cognome per poi permettere all'utente di cliccare sul nome e fargli aprire un pop up per vedere id ettagli del paolo bonolis

los cript lo avevo già terminato ed aveeva solo il cognome come riferimento. ora mi si è aggiunta stya cosa del nome

quindi risolto il problem precedente con la join cioè accostare Paolo a Bonolis mi resta questo problema.

In questo caso ad esempio io con la join pesco Francesco Paolo e lo accosto a bonolis(secondo dei criteri stabiliti) e mi si crea la pagina con i nomi listati. Ma resta il problema che qundo si clicca sul nome non so come ritornare a quella tabella per estrarre tutti i dati di Francesco Paolo bonolis.

Anche se pensandoci potri lavorare semplicemente con l'id.

Magari non perderci troppo tempo, forse conviene che riformulo tutto e vedos e riesco con l'id

grazie tanto per il supporto
 
ciao
non so qaunti nomi/cognomi hai già inserito nella tabella, ma se sono pochi ti riconviene ripensare al tutto
es.
tabella nomi con tre campi

id nome cognome

tabella principale con i campi
id id_persona (== all'id della balella nomi) e gli altri campi che ti servono
penso che una cosa del genere ti semplificherebbe molto la vita
 
ciao
non so qaunti nomi/cognomi hai già inserito nella tabella, ma se sono pochi ti riconviene ripensare al tutto
es.
tabella nomi con tre campi

id nome cognome

tabella principale con i campi
id id_persona (== all'id della balella nomi) e gli altri campi che ti servono
penso che una cosa del genere ti semplificherebbe molto la vita

no la tabella da cui devo estrarre i dati contiene più di 15.000 nomi.

da qui in poi seguiva un papiro enorme di cui voi vi siete salvati perchè proprio alla fine ho avuto un intuizione e funge tutto perfettamente.

Comquneu ho in parte risolto il primo problema associando alle mie tabelle l'ID univoco della tabella madre e da lì con un quasi semplice JOIN ho risolto in parte
PHP:
	$qry2=mysql_query("SELECT * FROM mon_mia tabella);
while($row_2=mysql_fetch_array($qry2)){
    $nome_da_tab2=$row_2['ID'];
    $valore_da_tab2=$row_2['Nome'];
	
		    $qry1=mysql_query("SELECT Nome FROM tabellamadre1 AS uno JOIN tabellamadre2 AS due ON uno.ID_NAME = due.lastnameid AND due.ID_NAME='$nome_da_tab2'");
    //verifico l'esistenza
    $esiste=mysql_num_rows($qry1);
    if($esiste > 0){

            $row_1=mysql_fetch_array($qry1);
        $valore_da_tab1=$row_1['Nome'];

        $result=mysql_query("UPDATE mon_miatabella SET Nome='$valore_da_tab1'  WHERE ID='$nome_da_tab2'");
        
    }
	}

diciamo che l'altro problema sarebbe che vorrei apparrisse pure il nome della serie che ora mi estrae il cognome "Piripacchio" mentre vorrei mi uscisse "antonio Piripacchio"

il nome sarebbe "firstnameid" quindi dovrei modificare questa join

PHP:
SELECT Nome FROM tabellamadre1 AS uno JOIN tabellamadre2 AS due ON uno.ID_NAME = due.lastnameid AND due.ID_NAME='$nome_da_tab2

aggiungendo il first name e poi nell'update aggiungere

PHP:
"UPDATE mon_miatabella SET Nome='$nome_da_tab1 cognome_da_tab1'  WHERE ID='$nome_da_tab2'"

però non è proprio necessario solo che se ci riuscissi sarebbe oro

grazie cmq siete veramente grandi a ispirarmi

coem vado avanti se nel mentre non mi arrivano suggerimenti epr il firstname, esporrò il prossimo problema(sempre se proprio non ci riesco)
 
ciao
un piccolo suggerimento per la tabella nomi nel caso di nome o cognome doppio (che come mi hai detto sono numerosissimi)
es.
IDname name
....
9 Fiorello
10 Bongiorno
11 Sandro Maria
12 De Sanctis
fatti uno script a parte che ti standardizza tutti i nomi e/o cognomi
PHP:
<?php
//dati di connessione
$q=mysql_query("SELECT * FROM nomi");
while ($riga = mysql_fetch_array($q)){
	$IDname=$riga['IDname'];
	$name=$riga['name'];
	//questo per sicurezza di scrittura
	$name=strtolower($nome);//es. DE SanCtis diventa de sanctis
	$name=ucfirst($nome);//de sanctis diventa De Sanctis
	//e questo per bypassare il nome doppio
	$name=str_replace("_"," ",$name);//es. De Sanctis diventa De_Sanctis
	$qup="UPDATE nomi SET name='$name' WHERE IDname=$IDname";
}
?>
quano poi estrai togli l'undscore
PHP:
<?php
//.....
echo "nome: ".str_replace(" ","_",$name);//es. De_Sanctis torna De Sanctis
//.....
?>
analogamente se inserisci un nuovo nome usi strtolower, ucfirst e str_replace
 
scusa se riprendo questo topic ma il problema è analogo a questa tabella sempre riferito al join

per ricordarti

.ho una tabella generale con che so circa 50.000 nomi e cognomi e soprannomi tutti nell'unica tabella ed ogni nome o cognome è su una riga

del tipo aNtonio piripacchio si trova
Antonio sulla riga 50
Piripacchio sulla riga 120
Pazzo sulla riga 180

allora per estrarre nome e gonome che mis ervivano ho usato 3 JOIN secondo il tuo suggerimento
PHP:
SELECT * FROM principale AS pr JOIN miatabella AS al ON pr.IDname = al.idnome
SELECT * FROM principale AS pr JOIN miatabella AS al ON pr.IDname = al.idcognome
SELECT * FROM principale AS pr JOIN miatabella AS al ON pr.IDname = al.idsoprannome

una mi restituiva il nome e l'altr il cognome ed il soprannome poi con uns emplice

PHP:
$nome."".$cognome."detto il".$soprannome

avevo nome e cognome e soprannome

mò è nato un altro problema ed è circa dalle 14.30 che cis to sopra :dipser:

inpratica nella mia tabella ho una serie di tati relativi all'ID_NAME però voelvo creare una tabella(html)dove invece di nome e cognome e soprannome doveva verificare se esisteva il soprannome mettere solo quello in caso contrario inserire il nome e cognome.

Le ho provate di tutto ma con l'if all'interno del while mi va in loop, fuori dal while non mi prende la variabile

questo + o meno il codice
PHP:
<?php
$query = "SELECT * FROM miatabella ORDER by valoreDESC";
$secondorisultato = mysql_query($query) or die("Query fallita: " . mysql_error() );
while ($linea = mysql_fetch_array($secondorisultato, MYSQL_ASSOC)) {
$sopra=$linea['soprannome'];
if($sopra!=0){
?>
<td colspan="2">
<?php
echo $sopra;
}
}else{
?>
<td><b>
<?php
$query = "SELECT Nome FROM principale AS pr JOIN miatabella AS alON pr.ID_NAME = al.nome WHERE al.list='OK' ORDER by al.Ing_Max DESC,al.valore DESC";
$result = mysql_query($query);
$number = mysql_numrows($result);
$i = 0;
while ($number > $i) {
$Nome = mysql_result($result,$i,"Nome");
$i++;
echo $Nome."<br>";
}
?>
</td>
<td><b><?php
$query = "SELECT Nome FROM principale AS pr JOIN miatabella AS alON pr.ID_NAME = al.cognome WHERE al.list='OK' ORDER by al.Ing_Max DESC,al.valore DESC";
$result = mysql_query($query);
$number = mysql_numrows($result);
$i = 0;
while ($number > $i) {
$Cognome = mysql_result($result,$i,"Nome");
$i++;
echo $Cognome."<br>";
}
?>
</td>
<?php
}

?>

però va in loop. ho rpovato anche mettendo l'html all'interno del php va in loop uguale(ovviamente) probabilemtne sbaglio qualcosa e non sono motlo lucido sicuramente èuna cavolata.
 

Discussioni simili