Album complet

Mammouth du PHP | 725 Messages

05 juil. 2012, 07:47

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

Mammouth du PHP | 725 Messages

08 juil. 2012, 03:52

personne n'a une idee sur cette requete?

Mammouth du PHP | 790 Messages

08 juil. 2012, 13:11

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
Les fautes de grammaire et d'orthographe contenu dans mes postes sont sous copyright, vous pouvez les utiliser pour un usage personnelle mais vous ne devrez en aucun cas les utiliser a des fins commercial sans une autorisation écrite de ma part.

Mammouth du PHP | 725 Messages

09 juil. 2012, 03:00

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...

ViPHP
ViPHP | 2577 Messages

09 juil. 2012, 09:28

SELECT langue, type, count(*) as nombre FROM chanson group by langue, type

Mammouth du PHP | 725 Messages

11 juil. 2012, 04:02

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

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

15 juil. 2012, 13:36

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 :)

@+
Il en faut peu pour être heureux ......

Mammouth du PHP | 725 Messages

28 juil. 2012, 11:55

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

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

28 juil. 2012, 20:42

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.

@+
Il en faut peu pour être heureux ......

Mammouth du PHP | 725 Messages

29 juil. 2012, 04:18

Merci moogli, je vais essayer

Mammouth du PHP | 725 Messages

29 juil. 2012, 04:51

il retourne toujours une seule ligne dans phpmyadmin