Forum Clubic

[Mysql] - Requête compliquée - ...pour moi du moins

Voilà je savais pas trop quoi mettre en titre :confused:

Alors voici mon code :

	<ul class="graph">
<?php

$query = "SELECT COUNT(idDossier) AS CountDossier,MarqueurD FROM dossiers WHERE ";
if (!isset($_GET[year]) && !isset($_GET[month]))
{
	$StartDate = date("Y-m")."-01";
	$EndDate = date("Y-m")."-31";
	$query .= "Date BETWEEN '$StartDate' AND '$EndDate' ";
}
if (isset($_GET[year]) && isset($_GET[month]) && $_GET[month] != "")
{
	$StartDate = "$year-$month-01";
	$EndDate = "$year-$month-31";
	$query .= "Date BETWEEN '$StartDate' AND '$EndDate' ";
}
if (isset($_GET[year]) && ($_GET[month]==""))
{
	$StartDate = "$year-01-01";
	$EndDate = "$year-12-31";
	$query .= "Date BETWEEN '$StartDate' AND '$EndDate' ";
}
$query .= "GROUP BY MarqueurD";
$requeteID = mysql_query($query);

$query2 = "SELECT COUNT(idDossier) AS TotalDossiers FROM dossiers WHERE Date BETWEEN '$StartDate' AND '$EndDate'";
$requeteID2 = mysql_query($query2);
$data2=mysql_fetch_assoc($requeteID2);
if (mysql_num_rows($requeteID))
{
echo '<p>'.$data2[TotalDossiers].' dossiers sur la période du <strong>'.$StartDate.'</strong> au <strong>'.$EndDate.'</strong>.</p>';
	while ($data=mysql_fetch_assoc($requeteID))
	{
	$MarqueurDDisplay = $MarqueurDossier[$data[MarqueurD]];
	$ColorDisplay = $CouleurDossier[$data[MarqueurD]];
	$Percentage = $data[CountDossier]/$data2[TotalDossiers]*100;
	$DisplayPercentage = substr("$Percentage",0,5);
	$Width = 125+$DisplayPercentage*6;
	echo '<li style="background-color:'.$ColorDisplay.';width:'.$Width.'px">'.$data[CountDossier].' '.$MarqueurDDisplay.' - '.$DisplayPercentage.'%</li>';
	}
}
else
{
	echo"<p>Pas de dossier sur la période du $StartDate au $EndDate.</p>";
}

?>

En gros j’affiche un graphique (des barres tout simplement) qui liste sur une période donnée le nombre de dossiers, et qui les groupe en fonction de leur état d’avancement.

Cela ne pose aucun problème.

MAIS, je voudrais pouvoir, à côté, afficher le nombre de véhicules (une seconde table est concernée donc) sur cette même période. Or la table véhicules ne contient pas d’infos sur la date.

En revanche les véhicules sont liés aux dossiers par l’idDossier.

Comment procéder pour réaliser cette requête ? faut faire des JOIN un truc comme ca ?

PS: au passage un avis et des critiques sur le code posté sont les bienvenus :smiley:

Merci à vous par avance !

Si besoin est je peux poster la structure des tables.

AHHHH !!! la lumière divine vient de me toucher, j’ai eu l’inspiration ^^

SELECT COUNT (idVehicule) AS CountVIN,MarqueurV FROM Dossiers,vehicules WHERE vehicules.idDossier = dossiers.idDossier AND dossiers.data BETWEEN '$StartDate' AND '$EndDate' GROUP BY MarqueurV;

En revanche ma question tient toujours pour mon code :smiley:

tu veux pas filer la structure des table plutot

tu veux un nombre de dossiers pour une periode donnée et le nombre de voiture correspondant c ça ?

c ca :slight_smile: Mais ma requête fonctionne là :smiley:

SQL
CREATE TABLE `dossiers` (

idDossier int(4) unsigned NOT NULL auto_increment,
codeDossier varchar(15) NOT NULL default ‘’,
Date date NOT NULL default ‘0000-00-00’,
idClient tinyint(3) unsigned NOT NULL default ‘0’,
idTransporteur tinyint(3) unsigned NOT NULL default ‘0’,
Infos text,
MarqueurD tinyint(1) unsigned NOT NULL default ‘3’,
PRIMARY KEY (idDossier),
UNIQUE KEY codeDossier (codeDossier)
) TYPE=MyISAM;

REATE TABLE vehicules (
idVehicule int(5) unsigned NOT NULL auto_increment,
idDossier tinyint(4) unsigned NOT NULL default ‘0’,
Chassis varchar(17) NOT NULL default ‘’,
Montant decimal(7,2) NOT NULL default ‘0.00’,
Avenant varchar(10) NOT NULL default ‘’,
Details varchar(50) default NULL,
MarqueurV tinyint(1) unsigned NOT NULL default ‘1’,
PRIMARY KEY (idVehicule)
) TYPE=MyISAM;