PHP/SQL SELECT date sur multitable

Fermé
maverickz Messages postés 49 Date d'inscription lundi 12 octobre 2009 Statut Membre Dernière intervention 10 août 2011 - 13 nov. 2009 à 13:57
maverickz Messages postés 49 Date d'inscription lundi 12 octobre 2009 Statut Membre Dernière intervention 10 août 2011 - 14 nov. 2009 à 16:24
Bonjour,

J'ai un petit souci pour comparer une date dans ma base de donnée avec une autre donnée via une variable PHP.

Je suis bien arrivé a obtenir le résultat souhaité sans tenir compte de la date :

En gros jusqu'à présent j'ai un champ quantitéMAX par produit et un champ quantitéCommandé , j'obtiens ensuite la quantité restante via une simple soustraction des deux.

<table>
       <tr>
            <td> Quantity : 18 </td>
	    <td> Quantity Order : 3 </td>
            <td> Quantity Left : 15 </td>
      </tr>
       <tr>
	    <td> Quantity : 3 </td>
	    <td> Quantity Order : 3 </td>
            <td> Quantity Left : 0 </td>

      </tr>
      <tr>
	    <td> Quantity : 40 </td>
	    <td> Quantity Order : 12 </td>
            <td> Quantity Left : 28 </td>
     </tr>
</table>




Seulement maintenant, je souhaite connaitre la quantité de produits restants par date par rapport a sa quantité max en stock.

Les quantités restantes devraient donc changer par rapport a une date que je choisis en PHP (calendrier).
Cette date serait comparée avec des dates présentes dans la base de donnée.

Pour cela j'ai un champ date dans ma base de donnée qui m'affiche le jour où des commandes ont eu lieu.

Pour avoir la comparaison entre deux dates, je suppose qu'une simple requête du type :

$result=mysql_query("SELECT shipDate FROM date WHERE shipDate = $shipDate")

aurait du suffire, mais bon , comme a son habitude en retournant le machin dans tous les sens, cette simple requête ne fonctionne pas et ne retourne rien du tout ;-)


Petits détails : les dates dans ma base de donnée sont de type VARCHAR et valent comme enregistrement 13/11/2009. C'est volontaire pour éviter les date de type JJ-MM-AAAA.

Un écho de ma date en PHP me donne la même chose : 13/11/2009.


Voici le code complet qui m'affiche la table correcte copiée plus haut, mais qui m'affiche les mêmes résultats quel que soit la date choisie, il me reste donc plus qu'a faire fonctionner ce champs date et c'est bingo.

function showLeftProducts($shipDate) {
	$connect=MySQLConnect();
	$quantityLeft = array();
	$i=1;
	$request = 
        mysql_query('SELECT p.quantity AS quantity, 
                               SUM(d.productQuantity) AS productQuantity, 
                               o.shipDate AS shipDate
							
                            FROM products p, ordersdetails d, orders o
                            WHERE p.productID = d.productID 
			    AND o.orderID = d.orderID
			   GROUP BY p.quantity, d.productQuantity
			   AND o.shipDate = '.$shipDate);
	
       while($result = mysql_fetch_array($request)) {
		
                $quantityLeft[$i]['quantity'] = $result['quantity'];
		$quantityLeft[$i]['productQuantity'] = $result['productQuantity'];
		$i++;
	
       }

	mysql_close($connect);
return $quantityLeft;
}




Merci pour vos réponses et d'avoir pris la peine de me lire
A voir également:

4 réponses

Archeus01 Messages postés 1571 Date d'inscription mercredi 3 octobre 2007 Statut Membre Dernière intervention 9 juin 2022 450
13 nov. 2009 à 15:15
Bonjour, j'ai lu la fin en fast...
Pour comparer des chaines, utilise like :


$result=mysql_query("SELECT shipDate FROM date WHERE shipDate like $shipDate")
0
maverickz Messages postés 49 Date d'inscription lundi 12 octobre 2009 Statut Membre Dernière intervention 10 août 2011 18
13 nov. 2009 à 16:01
Hello,

Merci pour ta réponse, malheureusement il ne m'affiche rien dans l'écho , assez spécial d'ailleurs.


J'ai changé le type du champ shipDate de VARCHAR dans la table en mode DATE, soit.


La fonction de test pour voir si il trouve bien un date ressemble à ceci :
--------------------------------------------------------------------------------------

function datetest($shipDate) {
	echo $shipDate;     // ShipDate est de type FR   13/11/2009
	
        $date=$shipDate;
	$shipDate=dateus($date);  // On convertit en US :  2009-11-13
	echo $shipDate;   // On teste, c'est parfait
	
        $connect=MySQLConnect();  // Connexion DB
	$request=mysql_query("SELECT shipDate FROM orders WHERE shipDate = $shipDate");
	$result=mysql_fetch_array($request);
mysql_close($connect);
return $result;
}




on récupère le résultat sur une page PHP et on tente de l'afficher :
------------------------------------------------------------------------------
$date=datetest($shipDate);
echo $date;
print_r($date);


et la NADA :-/
J'ai essayé avec le LIKE , pareil

Pourtant dans ma DB dans, sans fautes de frappes, la table "orders" contient un champ "shipDate" en mode "DATE" qui lui a comme contenu "2009-11-13".


Si quelqu'un comprends qu'il me fasse signe ^^

Merci
0
Archeus01 Messages postés 1571 Date d'inscription mercredi 3 octobre 2007 Statut Membre Dernière intervention 9 juin 2022 450
13 nov. 2009 à 17:21
Remplace le $request par SELECT shipDate FROM date et envoie ici le résultat du printr (coupe si y'en a une dizaine deux suffisent). J'en ai besoin pour t'aider un peu plus
0
maverickz Messages postés 49 Date d'inscription lundi 12 octobre 2009 Statut Membre Dernière intervention 10 août 2011 18
14 nov. 2009 à 16:24
hello, désolé de ne pas avoir réagi plus tôt, j'étais assez occupé ;-)

Sinon tout d'abord Archeus01, je te remercie pour tes réponses, ensuite j'ai trouvé où était ma faute.

Si ca peut faire profiter quelqu'un , lorsqu'on veut comparer une date qui se trouve dans la base de donnée SOUS LE FORMAT DATE AMERICAIN 0000-00-00 avec une date qu'un utilisateur sélectionne sur le site de type DATE FRANCAISE 00/00/0000



/* Convertit les dates de type JJ/MM/AAAA vers le format Date DB américain YYYY-MM-DD */

function dateUS($date)
{
  $date = explode('/', $date);
  $date = array_reverse($date);
  $date = implode('-', $date);
  return $date;
}



/* On fait passer notre variable dans la fonction

 
$date=$shipDate;  // vaut 14/11/2009
$shipDate=dateUS($date);  // ici shipDate vaudra 2009-11-14


... Connexion a la DB ....

// Ne pas oublier les ' ' entre le nom de la variable, mon erreur venait de la 

$result=mysql_query("SELECT shipDate FROM orders WHERE shipDate = '$shipDate' ")  

$date=mysql_fetch_array($request);

print_r($date);







Bonne journée a tous ;-)
0