- Home
- Categorie
- Coding e Sistemistica
- PHP
- Inner JOIN per due campi
-
Questo è il codice:
[php]
//Prelevo i dati
$query="SELECT sentenze.*, categoria_guide.nome AS cont FROM sentenze JOIN categoria_guide ON sentenze.Arg_Prim = categoria_guide.id";
$res = mysql_query($query);if ($res && mysql_num_rows($res) > 0){
//se entro in questo if vuol dire che la query ha prodotto dei risultati.
//chiudo il php e inserisco del codice html
?><table border="1">
<tr>
<td>Campo 1</td>
<td>Campo 2</td>
<td>Campo 3</td>
<td>Campo 4</td>
<td>Campo 5</td>
</tr><?php
//ho apreto il tag della tabella e inserito una riga di intestazione con i nomi dei campi.
while($row=mysql_fetch_assoc($res)){
//per ogni "ciclata" del while produciamo una riga della tabella
?><tr> <td><?php echo $row['id']?></td> <td><?php echo $row['titolo']?></td> <td><?php echo $row['oggetto']?></td> <td><?php echo $row['cont']?></td> <td><?php echo $row['cont']?></td> </tr>
<?php
} //chiusura while
?>
</table>
<?php
} // chiusura if
?>
[/php]Sapresti aiutarmi?
-
Nel tuo codice stampi la stessa informazione sia per il campo 4 che per il 5.
Modificalo come segue:
[PHP]
<tr>
<td><?php echo $row['id']?></td>
<td><?php echo $row['titolo']?></td>
<td><?php echo $row['oggetto']?></td>
<td><?php echo $row['Arg_Prim']?></td>
<td><?php echo $row['Arg_Sec']?></td>
</tr>
[/PHP]
-
Ciao Cyrus,
il problema è che Arg_Prim e Arg_Sec sono numeri e li dovrei mettere in relazione con la tabella 'categorie_guide' che ho postato nel primo post.Ecco come sarebbe:
categorie_guide
id | nome
1 | Asilo
2 | Cittadinanza
3 | Flussisentenze
id | titolo | oggetto | Arg_Prim | Arg_Sec
1233 | Sentenza n. | oggetto | 1 | 2
1234 |Sentenza n. | oggetto | 2 | 4Aiuto please
-
Capito.
Non so se è la soluzione più pulita, ma appoggiarti ad una variabile tutte le corrispondenze della categorie_guide, quindi[PHP]
$query1="SELECT *FROM categoria_guide";
$res1 = mysql_query($query1);
[/PHP]Dopodichè, durante la stampa della tabella vai a cercare il nome
[PHP] <tr>
<td><?php echo $row['id']?></td>
<td><?php echo $row['titolo']?></td>
<td><?php echo $row['oggetto']?></td>
<td><?php echo $row['cont']?></td>
<td><?php while($row1=mysql_fetch_assoc($res1)){
if $row['Arg_Sec']==$row1['id'] echo $row1['nome'] }?></td>
</tr>
[/PHP]
-
No infatti non è proprio pulita, infatti una cosa del genere la avevo sperimentata in un progetto precedente ma non è una cosa fatta bene.
Grazie dell'aiuto.
Qualcun'altro mi potrebbe aiutare?
Grazie
-
Ciao stable,
non sono sicuro di aver capito bene cosa vuoi fare, se quello che vuoi fare è unire 2 volte la stessa tabella utilizzando un campo differente dovresti fare cosi:SELECT sentenze.*, categoria_guide.nome, categoria_guide_sec.nome AS nome_sec FROM sentenze JOIN categoria_guide ON categoria_guide.id = sentenze.Arg_Prim JOIN categoria_guide AS categoria_guide_sec ON categoria_guide_sec.id = sentenze.Arg_Sec WHERE sentenze.id = '12'
-
L'idea è proprio quella di unire due tabelle e due campi all'interno di queste tabelle, Thedarkita ho provato quello che mi hai postato, ma purtroppo non funziona e non capisco il perchè...
-
Dovrebbe funzionare, lanciando la query da phpMyAdmin restituisce qualche errore o si vede correttamente il risultato che ti aspettavi?
-
restituisce vuoto
-
Il problema è che per fare un join di una tabella 2 volte con un altra devi usare la tecnica degli alias:
select
a.id, b.nome as PrimaSentenza,
a.titolo, c.nome as SecondaSentenza
from sentenze a
left join categorie_guide b on a.Arg_Prim = b.id
left join categorie_guide c on a.Arg_Sec = c.id
where a.id = 12
-
Ho appena creato in locale le 2 tabelle che hai detto, con quei dati, lanciando la query che ti ho dato io e inserendo un where corretto come la sentenza 1233 del tuo esempio mi sembra funzioni perfettamente.
Forse hai provato a mettere una sentenza non presente?
-
ProblemiPC, in effetti con due alias il problema è stato risolto.
Per correttezza posto la query nel caso dovesse servire a qualcuno:
SELECT a.id, b.nome AS PrimaSentenza, a.titolo, c.nome AS SecondaSentenza
FROM sentenze a
LEFT JOIN categoria_guide b ON a.Arg_Prim = b.id
LEFT JOIN categoria_guide c ON a.Arg_Sec = c.id
WHERE a.id =1248
LIMIT 0 , 30
P.S. Grazie anche agli altri che mi hanno aiutato
-
E se io volessi fare l'elenco delle sentenze indicando accanto per ciascun id la loro categoria di appartenza?
Una cosa del genere
id Arg_Prim Arg_Sec 1 bla bla 2 ..... bla 3 ....... bla
-
up please.
Credo sia una cosa che potrebbe interessare vari utenti...Grazie
-
Non hai già tutti e 3 i valori restituiti dalla query? Non è sufficiente mandarli in output con php per formare la tabella che hai indicato?
-
Si si esatto giusto, non avevo riflettuto scusate