Stampare orizzontalmente i valori da un database

  • Creatore Discussione Creatore Discussione Garaux
  • Data di inizio Data di inizio

Garaux

Utente Attivo
24 Feb 2013
50
0
0
Ciao,
avrei da porvi un piccolo quesito a cui ancora non sono riuscito a dare una risposta adeguata.
In breve…
Ho creato un database con MySQL in cui figurano diverse tabelle relazionate tra di loro.
La tabella principale è denominata articoli in cui figurano tutti gli articoli associati agli autori, alle categorie e a diverse lingue.
I dati sono stampati a video utilizzando script in PHP come sotto riportato:

[table="width: 500, align: left"]
[tr]
[td]Nome articolo[/td]
[td]Lingue[/td]
[td]Categoria[/td]
[td]Autore[/td]
[/tr]
[tr]
[td]Primo articolo[/td]
[td] Italiano[/td]
[td]A[/td]
[td]X[/td]
[/tr]
[tr]
[td]Primo articolo[/td]
[td]Inglese[/td]
[td]A[/td]
[td]X[/td]
[/tr]
[tr]
[td]Primo articolo[/td]
[td]Tedesco[/td]
[td]A[/td]
[td]X[/td]
[/tr]
[tr]
[td]Secondo articolo[/td]
[td]Italiano[/td]
[td]B[/td]
[td]Y[/td]
[/tr]
[/table]



Io però vorrei che i valori venissero stampati in modo orizzontale

[table="width: 500, align: left"]
[tr]
[td]Nome articolo[/td]
[td]Lingue[/td]
[td]Categoria[/td]
[td]Autore[/td]
[/tr]
[tr]
[td]Primo articolo[/td]
[td] Italiano, Inglese, Tedesco[/td]
[td]A[/td]
[td]X[/td]
[/tr]

[tr]
[td]Secondo articolo[/td]
[td] Italiano[/td]
[td]B[/td]
[td]Y[/td]
[/tr]

[/table]



Sapreste dirmi come fare?
Grazie!
 
Potresti utilizzare GROUP By ma non son come sia organizzato il tuo database.
 
Ciao Claudio e grazie della risposta.
Sarò più dettagliato. Allora: il database ha diverse tabelle, ma ti elenco qui quelle a cui faccio riferimento.
La tabella di riferimento è denominata article
[table="width: 200"]
[tr]
[td]ID[/td]
[td]article_name[/td]
[td]author_id[/td]
[/tr]
[tr]
[/table]

La tabella autori

[table="width: 200"]
[tr]
[td]ID[/td]
[td]author_name[/td]
[/tr]
[tr]
[/table]
è relazionata con la tabella articoli.
La tabella lingue è cosi strutturata
[table="width: 200"]
[tr]
[td]ID[/td]
[td]lang_name[/td]
[/tr]
[tr]
[/table]
Per associare ad ogni articolo una o più lingue ho creato una tabella di lookup denominata lookuplang

[table="width: 200"]
[tr]
[td]articleID[/td]
[td]langID[/td]
[/tr]
[tr]
[/table]
Ecco il codice con cui estrapolo i dati
PHP:
include 'includes/db.inc.php';

//CREAZIONE QUERY
try {
	
  $query_sql = 'SELECT article_name, author_name, lang_name FROM article 
                INNER JOIN author
                ON article.author_id = author.id
		inner join lookuplang
                on article.id = lookuplang.articleID                             
                inner join lang
                on langID = lang.id
		ORDER BY article.id ASC';
               
 
      $result = $GLOBALS['pdo']->query($query_sql);
}


//VISUALIZZAZIONE RECORD
foreach($result as $row) {
	$valori[] = array('article_name'=>$row['article_name'],'author_name'=>$row['author_name'], 'lang_name'=>$row['lang_name']);
}
include 'test.html.php';

Stampa a video dei valori
PHP:
<?php foreach($valori as $lista):?>
<?php
$lingua = $lista['lang_name'] . ': Status';
?>
<tr>
<td> <?php echo $lista['article_name']?></td>
<td> <?php echo $lista['lang_name']?></td>

 
  
 </tr>
<?php endforeach?></table>

La mia domanda è come mostrare in modo orizzontale i valori della tabella lingue per ogni articolo.

Grazie
 
Prova con qualcosa del genere:
Codice:
SELECT nome_articolo, CONCAT(lang_name, ', ') AS lingue, categoria, autore
FROM ((article INNER JOIN autori ON author_id=author_name)
INNER JOIN (lookuplang ON article_name=articleID)
INNER JOIN (lingue ON lingue.ID=langID))
GROUP BY nome_articolo
L'ho buttato così dal cellulare e non sono sicuro che funzioni ma prova.
 
Ciao, ho provato and inserire lo script che mi hai proposto, ma purtroppo non funziona :crying:
 
La risposta del server è questa:
Selezione al DB non riuscitaSQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'GROUP BY article_name' at line 9
 
Prova a togliere le parentesi esterne (c'è ancora qualche chance che funzioni):
Codice:
SELECT nome_articolo, CONCAT(lang_name, ', ') AS lingue, categoria, autore
FROM (article INNER JOIN autori ON author_id=author_name)
INNER JOIN (lookuplang ON article_name=articleID)
INNER JOIN (lingue ON lingue.ID=langID)
GROUP BY nome_articolo
 
Ciao, ho provato cosi e funziona :-)

PHP:
$query_sql = 'SELECT article_name,author.author_name, group_concat(lang_name) 
                  FROM article 
                 INNER JOIN author
                ON article.author_id = author.id
		inner join lookuplang
                on article.id = lookuplang.articleID                             
                inner join lang
                on langID = lang.id
                GROUP BY article_name'


Grazie per il supporto!
 
Figurati, ho notato che ho letto male anche il nome di qualche campo ahah
 

Discussioni simili