- Home
- Categorie
- Coding e Sistemistica
- Coding
- aiuto con una query e manipolazione dei dati estratti
-
aiuto con una query e manipolazione dei dati estratti
Ciao a tutti! Non riesco a venirne fuori!
Tabella 1:
nome - codice_1 - indirizzo
nome - codice_2 - indirizzoTabella 2:
codice_1 - titolo1 - autore1 - costo1
codice_1 - titolo2 - autore2 - costo2
codice_2 - titolo1 - autore1 - costo1
codice_2 - titolo2 - autore2 - costo2Per ogni nome che ha un codice vorrei poter manipolare i dati titolo1 - autore1 - costo1:
nome - codice_1
titolo1
autore1
costo1
titolo2
autore2
costo2
....Questa è la query ```
SELECT tabella1.nome,
tabella1.codice,
tabella1.indirizzo,
tabella2.titolo,
tabella2.autore,
tabella2.costo,
tabella2.codice
FROM tabella1 INNER JOIN tabella2 ON tabella1.codice = tabella2.codiceTroppo complicato?? Grazie!
-
@pettedemon said:
e adesso dovrei interpretare i dati... in modo da estrarre prima il nome poi indirizzo e associare a questi i dati....
Grazie!Cosa intendi per interpretare?
-
praticamente dovrei creare un elenco e a questo applicare degli stili, quindi vorrei poter manipolare i dati... ad esempio:
[PHP]<p>nome<br />
<strong>indirizzo</strong><br />
<br />
titolo1<br />
autore1<br />
costo1<br />
<br />
titolo2<br />
autore2<br />
costo2<br />
<br /><br />
<br />
nome2<br />
<strong>indirizzo2</strong><br />
<br />
titolo1<br />
autore1<br />
costo1<br />
<br />
titolo2<br />
autore2<br />
costo2<br />
<br />
-----------------</p>[/PHP]
-
Bè allora devi utilizzare php (o altri linguaggi lato server) per la connessione al database, l'esecuzione della query e l'estrapolazione dei dati.
-
Si certo, infatti la mia difficoltà è fare il ciclo in php.
[PHP]while ($row = mysql_fetch_array($esegui_query))
{$nome = $row['nome'];
$indirizzo = $row['indirizzo'];echo $nome.'<br>'; echo $indirizzo.'<br>'; foreach($dato as $nome){ $dato = $row['titolo']; }}[/PHP]
Praticamente non riesco a trovare il modo di estrarre i primi dati e a questi associare l'altra tabella e fare un elenco
-
A mio avviso è esatto tutto tranne il foreach
@pettedemon said:[php]
foreach($dato as $nome){
$dato = $row['titolo'];}}[/php]
I tuoi dati li hai tutti in $row poi non capisco perchè esegui il foreach su $dato.
-
e quindi comne faccio a estrarmi i dati adesso per ogni codice?
quindi il titolo autore e costo?per ora ho questo[PHP]while ($row = mysql_fetch_array($esegui_query))
{$nome = $row['nome'];
$indirizzo = $row['indirizzo'];$titolo = $row['titolo'];
echo $nome.'<br>'; echo $indirizzo.'<br>'; echo $titolo.'<br><br>'; [/PHP]ma mi stampa ogni volta il nome e indirizzo e invece dovrebbe apparire solo 1 volta con la lista associata e poi stampare il nome successivo con la sua lista associata...
-
In $row tu hai tutti i capi che hai selezionato mediante la query, quindi puoi fare come il nome e l'indirizzo:
$autore = $row['autore'];
$costo = $row['costo'];Se non è così allora vuol dire che non ho ben capito il tuo problema.
-
Come ti dicevo stampandolo così ogni volta mi ripete il nome e indirizzo e poi il relativo titolo e autore[PHP] nome1
indirizzo1titolo1_cod1
nome1
indirizzo1titolo2_cod1
nome1
indirizzo1titolo1_cod2
nome2
indirizzo2titolo2_cod2[/PHP]
Invece io vorrei che ad ogni nome ci fosse la lista ....
-
Allora forse ti conviene fare in questo modo, fai la query sulla prima tabella, mentre scorri i record, prima stampi l'indirizzo, il nome e il codice, e appena dopo esegui la query sulla seconda tabella relativa al codice che hai stampato, facendo la seconda query hai a disposizione solo i valori realtivi a quel codice e quindi stamperai solo quelli.
Ci potrebbe essere anche un modo sfruttando la query che avevi fatto tu, ma richiederebbe l'ausilio deggli array.
-
Non posso perchè se sono 100 utenti faccio 100 query ? A me servirebbe una cosa da impostare solo una volta. Esatto con l'utilizzo degli array. per quello chiedevo un aiuto
-
Allora potresti fare così:
[php]
$array1 = array ();
$array2 = array ();
while ( $row = mysql_fetch_array($esegui_query) ) {$nome = $row ['nome']; $indirizzo = $row ['indirizzo']; $titolo = $row ['titolo']; $autore = $row ['autore']; $array1 [$codice] ['indirizzo'] = $indirizzo; $array1 [$codice] ['nome'] = $nome; $array2 [$codice] ['titolo'] = $titolo; $array2 [$codice] ['autore'] = $autore;}
[/php]Quindi ora hai due array (array1 contenente i valori della tabella1, array2 contenente i valorid della tabella2).
Ora puoi ciclare i due array e stampare i dati come vuoi tu.
Ovviamente potrebbe essere migliorato.
-
Ti ringrazio per l'assistenza. Ho provato il tuo codice ma mi da errore ```
Notice: Undefined variable: codice in /Users/p/Desktop/www2010/www/prova.php on line 36[php] $array1 ['codice'] ['indirizzo'] = $indirizzo; $array1 ['codice'] ['nome'] = $nome; $array2 ['codice'] ['titolo'] = $titolo; $array2 ['codice'] ['autore'] = $autore;[/php]
-
E' si ho dimenticato di valorizzare la variabile $codice, ma a quanto pare sei riuscito a risolvere da solo, bene.
-
Quindi adesso ho 2 array. Riesci a darmi una mano su come estrarli ?
Devo farlo con dei cicli foreach ?
-
Puoi fare così
[php]
foreach ($array1 as $codice=>$value) {
in $value hai l'indirizzo ed il nome
in $array2[$codice] hai il titolo e l'autore}
[/php]Spero di essere stato chiaro.
-
Insomma...
Io ho bisogno di estrarre nome a parte, indirizzo a parte e poi per questo codice visualizzare i dati come ti dicevo prima...
Sono un po' in difficoltà detto in parole semplici
-
Devi scusarmi, ma mi sono sbagliato, dovrsti sostituire il ciclo while con il seguente:
[php]
$array=array();
while ( $row = mysql_fetch_array($esegui_query) ) {
$codice = $riga ['codice'];
$array [$codice] ['indirizzo'] = $riga ['indirizzo'];
$array [$codice] ['libri'] [] = array (
'titolo' => $riga ['titolo'],
'autore' => $riga ['autore'] );
}poi per stampare fai così:
foreach ( $array as $codice => $value ) {
echo $value ['indirizzo'] . "<br/>";
echo $value ['nome'] . "<br/>";
foreach ($value['libri'] as $key=>$valoriLibri) {
echo $valoriLibri['autore']."<br />";
echo $valoriLibri['titolo']."<br />";
}}
[/php]
Spero di non aver commesso errori, perchè sto andando via, ma se hai problemi fammi sapere che poi vedo oggi.
Ciao.
-
P-e-r-f-e-t-t-o-!
Grazie!
Ho modificato solamente $row con $riga e ho agiunto il campo costo!
Funziona tutto perfettamente!
[PHP]$array=array();
while ( $riga= mysql_fetch_array($esegui_query) ) {
$codice = $riga ['codice'];
$array [$codice] ['nome'] = $riga ['nome'];
$array [$codice] ['indirizzo'] = $riga ['indirizzo'];
$array [$codice] ['libri'] [] = array (
'titolo' => $riga ['titolo'],
'autore' => $riga ['autore'],
'costo' => $riga ['costo'] );
}foreach ( $array as $codice => $value ) {
echo $value ['indirizzo'] . "<br/>";
echo $value ['nome'] . "<br/><br />";
foreach ($value['libri'] as $key=>$valoriLibri) {
echo $valoriLibri['autore']."<br />";
echo $valoriLibri['titolo']."<br />";
echo $valoriLibri['costo']."<br />";}echo "<hr></hr>";
} [/PHP]
-
Bene bene.