PHP|Débutant :: Forums

Advertisement

Besoin d'aide ? N'hésitez pas, mais respectez les règles

Vous n'êtes pas identifié(e).

#1 30-11-2010 08:50:30

Anthotill
Membre
Inscription : 14-03-2010
Messages : 81

Inner join impossible

Bonjour,

J'ai un soucis avec un code qui génère des fichiers xls :

<?php

include('connexion.php');    
// Connexion MySQL

// la variable qui va contenir les données CSV
$outputCsv = '';

// Nom du fichier final
$fileName = 'produit_non_vendu.csv';

$month = $_POST['choix_mois'];

$DATE = date('Y-'.$month.'');

$requete = "SELECT CodeBarre,NumeroSerie,Etat,NumeroLivraison,ReferenceConstructeur FROM produits WHERE DateCreation LIKE '%$DATE%' AND Etat = 'ESTOCK' ORDER BY id";
$sql = mysql_query($requete);
if(mysql_num_rows($sql) > 0)
{
    $i = 0;

    while($Row = mysql_fetch_assoc($sql))
    {
        $i++;

        // Si c'est la 1er boucle, on affiche le nom des champs pour avoir un titre pour chaque colonne
        if($i == 1)
        {
            foreach($Row as $clef => $valeur)
                $outputCsv .= trim($clef).';';

            $outputCsv = rtrim($outputCsv, ';');
            $outputCsv .= "\n";
        }

        // On parcours $Row et on ajout chaque valeur à cette ligne
        foreach($Row as $clef => $valeur)
            $outputCsv .= trim($valeur).';';

        // Suppression du ; qui traine à la fin
        $outputCsv = rtrim($outputCsv, ';');

        // Saut de ligne
        $outputCsv .= "\n";

    }

}
else
// retour sur la page daccueil
exit('<meta http-equiv="refresh" content="0; url=../index.php?resultats=aucun" />');

// Entêtes (headers) PHP qui vont bien pour la création d'un fichier Excel CSV
header("Content-disposition: attachment; filename=".$fileName);
header("Content-Type: application/force-download");
header("Content-Transfer-Encoding: application/vnd.ms-excel\n");
header("Pragma: no-cache");
header("Cache-Control: must-revalidate, post-check=0, pre-check=0, public");
header("Expires: 0");

echo $outputCsv;

mysql_close($db);

exit();
?>

Avec une requête simple, j'obtiens mon résultat mais si je met un INNER JOIN, cela ne fonctionne pas. Quelqu'un pourrait m'en expliquer la raison ?

Merci beaucoup pour vos réponses,
Antho

Hors ligne

#2 30-11-2010 08:53:29

xTG
GrandGourou
Inscription : 18-06-2009
Messages : 1 127
Site Web

Re : Inner join impossible

Il n'y a aucune jointure dans ta requête.
Donc comment veux-tu pouvoir la transformer en syntaxe ANSI avec un inner join ? ^^

Hors ligne

#3 30-11-2010 09:26:47

Anthotill
Membre
Inscription : 14-03-2010
Messages : 81

Re : Inner join impossible

Bonjour,

Dans l'exemple, je n'ai pas fait d'inner join mais en gros la requête deviendrait :

SELECT CodeBarre,NumeroSerie,Etat,NumeroLivraison,ReferenceConstructeur
FROM produits
INNER JOIN produits_config
ON produits.ReferenceConstructeur = produits_config.PartNumber
WHERE DateCreation LIKE '%$DATE%' AND Etat = 'ESTOCK' ORDER BY id

Merci pour ta réponse :-)

Hors ligne

#4 30-11-2010 12:23:30

Maljuna Kris
Infantimigulo
Lieu : Douarnenez 29100 Breizh Izel
Inscription : 08-05-2009
Messages : 2 453
Site Web

Re : Inner join impossible

Saluton,
Il nous faudrait, a minima, le résultat d'un SHOW CREATE TABLE sur chacune des deux tables produits  et  produits_config, car si, par exemple, la colonne DateCreation est, ce qui serait normal, de type DATE ou DATETIME voire TIMESTAMP, le LIKE a peu de chance d'être opérant.


Gloire à qui n'ayant pas d'idéal sacro-saint,
Se borne à ne pas trop emmerder ses voisins. G. Brassens Don Juan 1976.
Avĉjo MoKo kantas
La chaîne YouTube MoKo Papy

Hors ligne

#5 30-11-2010 13:25:33

Anthotill
Membre
Inscription : 14-03-2010
Messages : 81

Re : Inner join impossible

Bonjour,

Il s'agit d'un datetime, dans ce cas précis comment faire ? Pourquoi cela n'est pas opérant ? peut être que le like ne fonctionne pas sur un champ datetime ?

Cela fonctionne parfaitement si la requête ne contient pas le INNER JOIN

Merci beaucoup
Antho

Dernière modification par Anthotill (30-11-2010 13:26:13)

Hors ligne

#6 30-11-2010 17:17:19

Maljuna Kris
Infantimigulo
Lieu : Douarnenez 29100 Breizh Izel
Inscription : 08-05-2009
Messages : 2 453
Site Web

Re : Inner join impossible

Anthotill a écrit :

Il s'agit d'un datetime, dans ce cas précis comment faire ? Pourquoi cela n'est pas opérant ? peut être que le like ne fonctionne pas sur un champ datetime ?

Non, non, pas peut-être...


Gloire à qui n'ayant pas d'idéal sacro-saint,
Se borne à ne pas trop emmerder ses voisins. G. Brassens Don Juan 1976.
Avĉjo MoKo kantas
La chaîne YouTube MoKo Papy

Hors ligne

#7 30-11-2010 18:09:54

moogli
Modérateur
Inscription : 08-05-2009
Messages : 336
Site Web

Re : Inner join impossible

yop,

MK as-tu un lien qui explique cela, je n'en ai pas trouvé ? smile

merci

@+


Il en faut peu pour être heureux pompompompompompompompompompompom

Hors ligne

#8 30-11-2010 21:42:46

Maljuna Kris
Infantimigulo
Lieu : Douarnenez 29100 Breizh Izel
Inscription : 08-05-2009
Messages : 2 453
Site Web

Re : Inner join impossible

Legu Tiun Diablan Manlibron, tout simplement.


Gloire à qui n'ayant pas d'idéal sacro-saint,
Se borne à ne pas trop emmerder ses voisins. G. Brassens Don Juan 1976.
Avĉjo MoKo kantas
La chaîne YouTube MoKo Papy

Hors ligne

#9 01-12-2010 05:51:10

Anthotill
Membre
Inscription : 14-03-2010
Messages : 81

Re : Inner join impossible

Bonjour,

Dans ce cas, comment faire alors ? Peut être

WHERE DateCreation LIKE '$DATE-%'

Qu'en pensez vous ?

Antho

Hors ligne

#10 01-12-2010 06:48:44

Pierrot
Ancien nouveau
Inscription : 08-05-2009
Messages : 1 195

Re : Inner join impossible

$DATE = date('Y-'.$month.'');

donc
$DATE=date('Y');
WHERE (YEAR(DateCreation) = $DATE AND MONTH(DateCreation) = $month)

a++

Hors ligne

#11 01-12-2010 09:40:00

moogli
Modérateur
Inscription : 08-05-2009
Messages : 336
Site Web

Re : Inner join impossible

@MK j'avoue que je pige pas, peut être hormis le fait que le like sur des nombre n'est pas ansi SQL mais une 'extension' mysql
enfin c'est quand même bon à savoir smile
merci

@+


Il en faut peu pour être heureux pompompompompompompompompompompom

Hors ligne

#12 02-12-2010 05:39:36

Maljuna Kris
Infantimigulo
Lieu : Douarnenez 29100 Breizh Izel
Inscription : 08-05-2009
Messages : 2 453
Site Web

Re : Inner join impossible

La colonne DateCreation est un DATETIME, c'est donc un type particulier de données que MySQL manipulent selon des règles très particulières qui sont détaillées dans la doc et pour lesquellesune petite collection de fonctions spécifiques sont proposées.
LIKE est vraiment le dernier opérateur de comparaison qu'il me viendrait à l'idée d'utiliser sur des colonnes de ce type.


Gloire à qui n'ayant pas d'idéal sacro-saint,
Se borne à ne pas trop emmerder ses voisins. G. Brassens Don Juan 1976.
Avĉjo MoKo kantas
La chaîne YouTube MoKo Papy

Hors ligne

#13 02-12-2010 07:46:19

Anthotill
Membre
Inscription : 14-03-2010
Messages : 81

Re : Inner join impossible

Bonjour,

Votre débat m'échappe, vous êtes des pros !

J'ai donc remplacé

 DateCreation LIKE '%$DATE%'
TO_DAYS(NOW()) - TO_DAYS(DateCreation) < 30

Ça à l'air de fonctionner même si la solution de Pierrot est également à retenir.

Merci beaucoup à tous, je pense que l'on peux dire que mon problème est résolu !

Vous êtes trop fort les gars, continuez comme ça ! Bravo et merci beaucoup

Antho

Hors ligne

#14 02-12-2010 09:23:02

moogli
Modérateur
Inscription : 08-05-2009
Messages : 336
Site Web

Re : Inner join impossible

ok, merci pour l'info MK smile

@+


Il en faut peu pour être heureux pompompompompompompompompompompom

Hors ligne

Pied de page des forums