PHP|Débutant :: Forums

Advertisement

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

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

#1 22-07-2012 08:08:40

infograph61
Membre
Inscription : 25-09-2009
Messages : 74

Faire une requête avec plusieurs valeurs provenant d'une autre requête

Bonjour à tous en ce dimanche ensoleillé.
J'ai encore un problème de requête.....
j'ai un requête qui me retourne plusieurs valeurs. et je n'arrive pas à faire un seconde requête avec toutes ces valeurs.

$CAresult1 = mysql_unbuffered_query("SELECT *  FROM `agenda_palettisation` WHERE `dim_caisse` = '$test'");
if ($CAresult1) {
while ($row = mysql_fetch_assoc($CAresult1)) {
$caisse = $row['id'] . PHP_EOL;
echo $caisse;
}
}

le résultat "echo "me donne : 35 36 42 , ce qui est bon.
Ma question, comment utiliser ce résultat pour faire une autre requête.? je cherche depuis 3 jours et je galère beaucoup.

Bonne journée et attention au coup de soleil, pour une fois ou il y en a.!!!
Cordialement

Hors ligne

#2 22-07-2012 20:52:38

Jc
Membre
Lieu : Zillisheim - Alsace
Inscription : 15-04-2010
Messages : 1 629
Site Web

Re : Faire une requête avec plusieurs valeurs provenant d'une autre requête

Bonjour,

En l'état des informations fournies, la seule chose que l'on est en mesure de te répondre c'est d'aller consulter le manuel MySQL.
Sinon fait nous un show create table sur les tables concernées, les colonnes que tu souhaites récupérer ainsi que les critères de filtrage à appliquer, et peut être que l'on pourra t'aider.

Bon dimanche.

Jc.


POO PHP+Ajax en MVC avec PDO et Bases de données épaisses  : What else?

Hors ligne

#3 23-07-2012 11:41:58

infograph61
Membre
Inscription : 25-09-2009
Messages : 74

Re : Faire une requête avec plusieurs valeurs provenant d'une autre requête

Bonjour,
Les explication claires n'ont jamais été mon fort.....
En fait j'ai 2 tables, je fais une requête sur la première qui me retourne une série de valeur ($caisse).
je fais une seconde requête avec cette valeur $caisse mais je n'obtiens des réponses que de la dernière valeur.
Donc comment faire ma seconde requête avec une variable $caisse (résultats de ma première requête) une requête du type ".... WHERE= ....OR=... OR...; "  pour obtenir l'ensemble des résultats.

Merci de votre aide
Cordialement
infograph61

Hors ligne

#4 24-07-2012 18:26:43

Jc
Membre
Lieu : Zillisheim - Alsace
Inscription : 15-04-2010
Messages : 1 629
Site Web

Re : Faire une requête avec plusieurs valeurs provenant d'une autre requête

Bonjour,

Vous allez dans phpmyadmin et dans l'onglet SQL, vous entrez la requête suivante "SHOW CREATE TABLE MyTable", vous affichez les textes complets, et vous nous faites un copier coller des résultats de la requête pour chacune des tables que vous souhaitez faire intervenir dans votre requête. Ensuite vous nous dites, quelles sont les colonnes (champs) que vous voulez retrouver dans votre requête, et pour terminer vous nous dites quel est l'ensemble des critères de filtrage que vous souhaitez appliquer sur vos colonnes. Si vous faites cet effort, je ferais l'effort également de vous écrire votre requête et de vous l'expliquer.

++


POO PHP+Ajax en MVC avec PDO et Bases de données épaisses  : What else?

Hors ligne

#5 24-07-2012 20:11:35

infograph61
Membre
Inscription : 25-09-2009
Messages : 74

Re : Faire une requête avec plusieurs valeurs provenant d'une autre requête

Bonsoir et merci de m'aider...
j'ai 2 tables :
La première :
CREATE TABLE `agenda_palettisation` (\n  `id` mediumint(1) NOT NULL auto_increment,\n  `titre` varchar(25) NOT NULL,\n  `dim_palet` varchar(25) NOT NULL,\n  `nbr_caisse` varchar(10) NOT NULL,\n  `caisse` varchar(15) NOT NULL,\n  `dim_caisse` varchar(20) NOT NULL,\n  `nombre_fardeau` varchar(5) NOT NULL,\n  `etui_fardeau` varchar(5) NOT NULL,\n  `total_etui_caisse` varchar(5) NOT NULL,\n  `total_couche` varchar(5) NOT NULL,\n  `total_etui_palet` varchar(11) NOT NULL,\n  `image` varchar(20) NOT NULL,\n  PRIMARY KEY  (`id`)\n) ENGINE=MyISAM AUTO_INCREMENT=103 DEFAULT CHARSET=utf8
La seconde :
CREATE TABLE `agenda_events` (\n  `id` int(11) NOT NULL auto_increment,\n  `date_enreg` varchar(15) NOT NULL,\n  `date_bis` varchar(15) NOT NULL,\n  `date` int(100) NOT NULL,\n  `type` mediumint(4) NOT NULL,\n  `id_membre` int(6) NOT NULL,\n  `titre` varchar(100) NOT NULL,\n  `texte` varchar(50) NOT NULL,\n  `country` varchar(20) NOT NULL,\n  `client` varchar(20) NOT NULL,\n  `ancien_code` varchar(15) NOT NULL,\n  `produit_finis` varchar(45) NOT NULL,\n  `des_PF` varchar(40) NOT NULL,\n  `site_prod` varchar(15) NOT NULL,\n  `lcr_cc` varchar(35) NOT NULL,\n  `plan_tech` varchar(50) NOT NULL,\n  `dimAC` varchar(20) NOT NULL default 'NA',\n  `encaissage` varchar(15) NOT NULL,\n  `datamatrix` varchar(5) NOT NULL default 'NA',\n  `impression` varchar(5) NOT NULL default 'NA',\n  `prog_cam` varchar(5) NOT NULL default 'NA',\n  `pharmacode` varchar(10) NOT NULL default 'NA',\n  `nbr_couleur` varchar(35) NOT NULL,\n  `marquage` varchar(25) NOT NULL,\n  `vignette` varchar(25) NOT NULL default 'NA',\n  `prixVign` varchar(20) NOT NULL default 'NA',\n  `valVign` varchar(15) NOT NULL default 'NA',\n  `masqVign` varchar(15) NOT NULL default 'NA',\n  `code_vign` varchar(15) NOT NULL,\n  `ligne` varchar(25) NOT NULL default 'NA',\n  `infos` varchar(25) NOT NULL default 'NA',\n  `facturation` varchar(10) NOT NULL,\n  `data1` varchar(30) NOT NULL,\n  `data2` varchar(30) NOT NULL,\n  `data3` varchar(30) NOT NULL,\n  `data4` varchar(30) NOT NULL,\n  `data5` varchar(30) NOT NULL,\n  `data6` varchar(30) NOT NULL,\n  `data7` varchar(30) NOT NULL,\n  `data8` varchar(30) NOT NULL,\n  `data9` varchar(30) NOT NULL,\n  `data10` varchar(30) NOT NULL,\n  `data11` varchar(30) NOT NULL,\n  `data12` varchar(30) NOT NULL,\n  `data13` varchar(125) NOT NULL,\n  `note1` varchar(100) NOT NULL default 'Creation pour realisation graphisme',\n  `date_note_1` varchar(10) NOT NULL default 'NA',\n  `date_note_2` varchar(10) NOT NULL,\n  `date_note_3` varchar(10) NOT NULL,\n  `date_note_4` varchar(10) NOT NULL,\n  `note2` varchar(100) NOT NULL default '1',\n  `date_note_5` varchar(15) NOT NULL,\n  `date_note_6` varchar(15) NOT NULL,\n  `date_note_7` varchar(15) NOT NULL,\n  `date_note_8` varchar(15) NOT NULL,\n  `note3` varchar(100) NOT NULL,\n  `date_note_9` varchar(15) NOT NULL,\n  `date_note_10` varchar(15) NOT NULL default 'Non',\n  `date_note_11` varchar(15) NOT NULL,\n  `date_note_12` varchar(15) NOT NULL,\n  `note4` varchar(100) NOT NULL,\n  `date_note_13` varchar(25) NOT NULL,\n  `date_note_14` varchar(25) NOT NULL,\n  `date_note_15` varchar(15) NOT NULL,\n  `date_note_16` varchar(15) NOT NULL,\n  `date_modif` varchar(15) NOT NULL,\n  PRIMARY KEY  (`id`)\n) ENGINE=MyISAM AUTO_INCREMENT=1396 DEFAULT CHARSET=utf8

En fait je voudrais récupérer les champs id, titre et texte de la table "agenda_events" quand encaissage est égal à id de la table "agenda_palettisation".
La ou je ne trouve pas c'est parce que je peux avoir plusieurs id (jusqu'à 8 valeurs) de la table "agenda_palettisation".

Encore merci, car je suis vraiment bloqué.
Cordialement
Infograph61

Hors ligne

#6 25-07-2012 00:23:21

Jc
Membre
Lieu : Zillisheim - Alsace
Inscription : 15-04-2010
Messages : 1 629
Site Web

Re : Faire une requête avec plusieurs valeurs provenant d'une autre requête

Bonsoir,

Oh mon Dieu!!! Les horreurs abominables issues de la logique implacable des CMS sont de retour!!! wink

Alors vous avez de gros problèmes, car la requête pour faire ce que vous souhaitez est impossible ou presque! En effet a cause de la modélisation pitoyable de votre base de données (vous n'y êtes pour rien je le sais bien), vous avez besoin d'établir une jointure entre agenda_events.encaissage et agenda_palettisation.id . Or la colonne encaissage est définie en varchar(15) alors que l'id objet de votre jointure est définie en mediumint(1) (O_o : mediumint(1) ??? j'ai du mal à entrevoir la pertinence d'une telle définition ici, mais bon...) et seules les jointures entre colonne de même définition sont possibles. (Difficile d'associer des pommes avec des poires).

Alors sans garantie de succès, la seule possibilité que vous ayez en l'état actuel des choses et si vous êtes certain que la colonne encaissage ne contienne que des valeurs numériques, et sans toucher au modèle, est de faire la requête suivante :


SELECT t0.id, t0.titre, t0.texte FROM agenda_events AS t0 INNER JOIN agenda_palettisation AS t1 ON t0.id=CAST(t1.id AS MEDIUMINT)
 

J'ai jamais testé un CAST sur une jointure, donc sans garantie que cela passe...

Bonne chance avec votre application^^

++

PS: Ne mettez pas d'index sur la colonne encaissage, car j'ai peur qu'à cause de l'index, la jointure ne passe pas malgré le CAST.

Dernière modification par Jc (25-07-2012 00:26:17)


POO PHP+Ajax en MVC avec PDO et Bases de données épaisses  : What else?

Hors ligne

#7 25-07-2012 07:24:50

infograph61
Membre
Inscription : 25-09-2009
Messages : 74

Re : Faire une requête avec plusieurs valeurs provenant d'une autre requête

Bonjour,
je vais essayer ce soir, mais j'ai les droits pour modifier la ( les tables..28 en tout pour cette base) si nécessaire .......et je ne pense pas que cela posera de problème pour les autres fonctions.
De toute façon je vais essayer chez moi avec la base de test.
Merci de votre aide et bonne journée
Cordialement
Infograph61

Hors ligne

#8 25-07-2012 17:27:05

infograph61
Membre
Inscription : 25-09-2009
Messages : 74

Re : Faire une requête avec plusieurs valeurs provenant d'une autre requête

Bonsoir,
J'ai pu modifié la colonne encaissage en mediumint, et je fais la requêtte :
$select ="select t0.id, t0.titre, t0.texte FROM agenda_events AS t0 INNER JOIN agenda_palettisation AS t1 ON t0.id=CAST(t1.id AS MEDIUMINT)  ";
    $result = mysql_query($select) or die('<b>Pas de resultat pour la caisse</b> : '. $test. '<br/>');
    $nbrEvents = mysql_numrows($result);

    if ($nbrEvents > 0)
    {

        $site_Content .= '<table width="925" border="0">';
        while ($row = mysql_fetch_array($result))
        {
            $id = $row["id"];
            $titre = safest($row["titre"]);
            $texte = safest($row["texte"]);       
            $dimAC = safest($row["dimAC"]);
            $encaissage = safest($row["encaissage"]);

et je n'obtiens aucun résultat (Pas de resultat pour la caisse)
c'est très compliqué pour moi et je cherche un autre moyen mais......

merci
Bonne soirée
Cordialement
Infograph61

Hors ligne

#9 26-07-2012 12:02:45

Jc
Membre
Lieu : Zillisheim - Alsace
Inscription : 15-04-2010
Messages : 1 629
Site Web

Re : Faire une requête avec plusieurs valeurs provenant d'une autre requête

Bonjour,

Si vous avez modifié la contrainte de domaine de encaissage en mediumint (faites attention que la valeur numérique entre parenthèses soit la même des deux côtés) vous n'avez plus besoin du CAST sur la jointure.

Le mieux c'est d'éditer la taille du champ des deux côtés sur phpmyadmin, de retirer la valeur 1 et d'enregistrer. La bonne taille s'ajustera automatiquement ce qui suffira largement dans un premier temps quand on voit le reste.

Réessayez la requête et dites ce que vous avez comme résultat.

++

Dernière modification par Jc (26-07-2012 12:03:00)


POO PHP+Ajax en MVC avec PDO et Bases de données épaisses  : What else?

Hors ligne

#10 27-07-2012 01:26:40

Jc
Membre
Lieu : Zillisheim - Alsace
Inscription : 15-04-2010
Messages : 1 629
Site Web

Re : Faire une requête avec plusieurs valeurs provenant d'une autre requête

Bonsoir,

Il y a eu une petite erreur qui s'est glisée dans ma requête, désolé ! La jointure doit s'écrire  ON t0.id=t1.encaissage  (en tenant compte de mon précédent post).

++


POO PHP+Ajax en MVC avec PDO et Bases de données épaisses  : What else?

Hors ligne

#11 27-07-2012 17:49:45

infograph61
Membre
Inscription : 25-09-2009
Messages : 74

Re : Faire une requête avec plusieurs valeurs provenant d'une autre requête

Bonsoir,
C'est vraiment cool de vous occuper de mon problème.
J'ai fait le test et j'ai toujours rien.
Je pars en vacances ce week-end et je vais en profiter pour essayer de comprendre les jointures, je vais lire en fait car je n'aurai pas mon ordi....
Bon week-end
@+
Infograph61

Hors ligne

Pied de page des forums