Page 1 sur 1

Album complet

Posté : 05 juil. 2012, 07:47
par rimie
Bonjour,

J'ai 2 tables des albums et des chansons, le meme album peut etre en plusieurs version de langue et type:

Albums
id_chanteur
nom_album
Chansons
id_album
nom_chanson
langue
type
Supposons que j'ai un album avec id 3 qui a 5 chansons:
3, chanson1, fr, 1
3, chanson2, fr, 1
3, chanson3, fr, 1
3, chanson4, fr, 1
3, chanson5, fr, 1
la langue peut etre "fr" ou "en", le type peut etre de 1 jusqu'a 3

Comment faire pour savoir si l'album 3 a 5 chansons dont la langue est "fr" avec le type 1?

Merci

Re: Album complet

Posté : 08 juil. 2012, 03:52
par rimie
personne n'a une idee sur cette requete?

Re: Album complet

Posté : 08 juil. 2012, 13:11
par juliette
tu dois sélectionner toutes les chansons qui ont un id_albume de 3 mais aussi quand la langue est fr et encore quand le type est de 1
SELECT * FROM chanson WHERE id_album=3 AND langue=fr AND type=1

Re: Album complet

Posté : 09 juil. 2012, 03:00
par rimie
mais d'une maniere generale, si on a ces donnees comme variable, par exemple, dans une requete, je veux calculer le total pour chaque langue et chaque type, resultat:

Langue fr type 1 total = 10
Langue fr type 2 total = 15
Langue en type 1 total = 7
etc...

Re: Album complet

Posté : 09 juil. 2012, 09:28
par Mazarini
SELECT langue, type, count(*) as nombre FROM chanson group by langue, type

Re: Album complet

Posté : 11 juil. 2012, 04:02
par rimie
SELECT langue, type, count(*) as nombre FROM chanson group by langue, type
Je le mets suivi de:
$reqS = $connexion->query($requete);
 echo count($reqS->fetchAll());
ca me retourne 1, alors que j'ai 114 enregistrement

Re: Album complet

Posté : 15 juil. 2012, 13:36
par moogli
et quand tu utilise la requete avec phpmyadmin ou une console mysql tu a quoi comme résultat ?

a tu essayé de le faire en deux fois ?
$reqS = $connexion->query($requete);
 $datas = $reqS->fetchAll();
echo count($datas);
perso je viens de tester ta requete, elle retourne 50 tuples pour 5 langues et 10 types.
<!doctype HTML>
<html>
<head>
<title>Test Rimie</title>
<style type="text/css">
thead {
	background-color: silver;
}

tfoot {
	background-color: yellow;
	border: none;
}
tfoot tr, tfoot tr td {
	border: none;
}
table {
	border: thin solid green;
	margin: 0;
	padding: 0;
}
table, tr, td, th, thead, tfoot {
	margin: 0 !important;
	
}
table, tr, th, thead, tfoot {
	padding: 0 !important;
}
td {
	text-align: center;
	border: thin solid green;
}
</style>
</head>
<body>
<?php

try {
	$PDOConnect = new PDO ( 'mysql:host=localhost;dbname=test', 'test', 'test' );
	$req = $PDOConnect->query ( 'SELECT langue, type, count(*) AS nombre FROM chansons GROUP BY langue, type' );
	$datas = $req->fetchAll ( PDO::FETCH_OBJ );
	echo 'il y a ' . count ( $datas ) . ' tuples en retour';
	echo <<<tbl
	<table>
		<thead>
			<tr>
				<th>Langue</th>
				<th>Type</th>
				<th>Nb chose</th>
			</tr>
		</thead>
		<tfoot>
			<tr>
				<td colspan="3">&nbsp;</td>
			</tr>
		</tfoot>
		<tbody>
tbl;
	foreach ( $datas as $d ) {
		echo <<<ligne
			<tr>
				<td>{$d->langue}</td>
				<td>{$d->type}</td>
				<td>{$d->nombre}</td>
			</tr>
ligne;
	}
} catch ( Exception $e ) {
	echo 'Erreur : ' . $e->getMessage () . '';
	echo 'N° : ' . $e->getCode ();
	echo '<pre>', var_dump ( $PDOConnect->errorInfo () ), '</pre><hr />';
	var_dump ( $a );
}
?>
		</tbody>
	</table>
</body>
</html>
avec les tables
create table chanteurs (
id_chanteur int not null auto_increment primary key,
nom varchar(50) not null
)engine = innodb;

create table albums (
id_album int not null auto_increment primary key,
id_chanteur int not null,
nom_album varchar(50) not null,
constraint fk_chanteur foreign key (id_chanteur) references chanteurs(id_chanteur)
)engine=innodb;

create table chansons (
id_chanson int not null auto_increment primary key,
id_album int not null ,
nom_chanson varchar(50) not null,
langue varchar(2) not null default 'fr',
type int not null default 1,
constraint fk_album foreign key (id_album) references albums(id_album)
)engine=innodb;
Pour les données j'ai utiliser un générateur pour avoir pas mal de tuples
- 10 chanteurs
- 100 albums
- 1500 chansons (moyen 15 par albums, mais va de 7 à 23)

faudrait que tu nous montre un poil de code, que l'on puisse avoir une idée plus globale de ce que tu fait, et pourquoi les tables et données que tu utilise pour avoir la même chose que toi :)

@+

Re: Album complet

Posté : 28 juil. 2012, 11:55
par rimie
Re,

Desole pour ce retard, j'ai reinstalle le serveur, les donnees dans la DB sont:
CREATE TABLE IF NOT EXISTS `chansons` (
  `id` int(3) NOT NULL AUTO_INCREMENT,
  `id_chanteur` int(3) NOT NULL,
  `type` int(3) NOT NULL,
  `langue` varchar(2) NOT NULL DEFAULT 'fr',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 AUTO_INCREMENT=6 ;

--
-- Dumping data for table `chansons`
--

INSERT INTO `chansons` (`id`, `id_chanteur`, `type`, `langue`) VALUES
(1, 1, 1, 'fr'),
(2, 1, 1, 'fr'),
(3, 1, 1, 'fr'),
(4, 1, 1, 'en'),
(5, 1, 1, 'en');
j'ai mis un seul type qui est 1, le resultat souhaitable est:

* Total des chansons francaises est 3.
* Total des chansons anglaises est 2.

Merci a vous

Re: Album complet

Posté : 28 juil. 2012, 20:42
par moogli
13 jours de réinstal Ouch :mrgreen:

Donc ma requête est toujours bonne faut juste virer les truc en trop ;)
select count(*) as nombre, langue from chanson group by langue
Tu auras ce que tu veux, je te laisse faire le formatage (une petite fonction qui passe du code langue au nom de la langue.

@+

Re: Album complet

Posté : 29 juil. 2012, 04:18
par rimie
Merci moogli, je vais essayer

Re: Album complet

Posté : 29 juil. 2012, 04:51
par rimie
il retourne toujours une seule ligne dans phpmyadmin