Page 1 sur 1

sql jointure et appel de données

Posté : 30 avr. 2014, 11:40
par WENKz
Bonjour après avoir finis de remplir ma base de donnée je souhaite appelé mon catalogue , j'ai trois table une table ou il y a les nom et id de produit, une table boutique ou je reference mes boutiques, et une table catalogue ou je recupère mes prix selon mes boutique et produit ,
je souhaite afficher un tableau mais j'ai un soucis ^^ j'utilise la requete
"SELECT * FROM PRODUIT LEFT JOIN CATALOGUE ON PRODUIT.id_produit = CATALOGUE.id_produit ORDER BY CATALOGUE.id_boutique  ";
ça fonctionne mais ensuite pour mettre dans un tableau je fais
while ( $produit = mysql_fetch_assoc($resultat) ) {

		if ($produit['id_boutique'] == '2'){$mis = $produit['prix'].'mis';}else{$mis = '';}
		if($produit['id_boutique'] == '1'){$sfa= $produit['prix'].'sfa';}	else{$sfa= '';}	
		echo '</tr><tr>
                         <td>'.$produit['nom_produit'].'</td>
                         <td>'.$sfa.'</td>
                         <td>'.$mis.'</td>';
		}
et la c'est le drame , je récupère bien le nom des produits mais à partir de certain produit une des colonnes duplique un prix (toujours le même)à l'infini :( que dois-je faire ?

Re: sql jointure et appel de données

Posté : 30 avr. 2014, 15:41
par yann18
bonjour,

il manquerait pas des balises <tr> devant encapsulées les colonnes(<td></td>)?
echo '<table>';
while ( $produit = mysql_fetch_assoc($resultat) ) {

                if ($produit['id_boutique'] == '2'){$mis = $produit['prix'].'mis';}else{$mis = '';}
                if($produit['id_boutique'] == '1'){$sfa= $produit['prix'].'sfa';}       else{$sfa= '';}
                echo '<tr>
                         <td>'.$produit['nom_produit'].'</td>
                         <td>'.$sfa.'</td>
                         <td>'.$mis.'</td>';
                    echo '</tr>';
                }
echo '</table>';

Re: sql jointure et appel de données

Posté : 30 avr. 2014, 16:58
par WENKz
merci de ta réponse mais non ^^ je les appelle
echo '</tr><tr><td>'

Re: sql jointure et appel de données

Posté : 09 mai 2014, 09:37
par WENKz
Personne pour m'aider ?

Re: sql jointure et appel de données

Posté : 09 mai 2014, 12:01
par yann18
selon ton mcd, il existe des prix qui ne sont rattachés à aucun produit(problème d'analyse certainement? ) et en faisant une jointure à gauche(left) on se retrouve systématiquement avec des prix ayant comme valeur NULL. Pour essayer de simplifier un peu les choses essaies de faire une requête sql avec jointure interne et dis nous ce que ça donne:
$sql = "SELECT * FROM PRODUIT INNER JOIN CATALOGUE ON PRODUIT.id_produit = CATALOGUE.id_produit ORDER BY CATALOGUE.id_boutique  ";
que donne la requête dans phpmyadmin?

Re: sql jointure et appel de données

Posté : 09 mai 2014, 14:58
par moogli
pour info : left peux produire des produits cartésiens (ce qui semble t'arriver). ce type de jointure est a éviter dan sun modèle normalement constitué ;)


le inner est optionnel c'est le cas par défaut :mrgreen:

@+

Re: sql jointure et appel de données

Posté : 20 mai 2014, 16:47
par WENKz
selon ton mcd, il existe des prix qui ne sont rattachés à aucun produit(problème d'analyse certainement? )
Bonjour, merci de vos réponse car toute les boutique non par forcement tout les produit de la table PRODUIT, dans la table catalogue je récupère le id_produit, id_boutique, url, et le prix si je ne met pas le
else{ $mis = '';}
j'ai des duplication ^^ j'ai essayé avec le inner en fait maintenant j'ai des faut doublon ... comment expliqué au lieu de m'afficher

produit1 | $sfa | $mis |

j'ai

produit1 | $sfa |
produit1 | |$mis

et ça seulement sur certain produit pas tous Oo'

Re: sql jointure et appel de données

Posté : 20 mai 2014, 20:44
par moogli
le select c'est sur le catalogue pas sur les produits.
Simplement parce que les produits font partie du catalogue et pas l'inverse. (quand tu regarde un catalogue c'est pour voir les produits, tu ne regarde pas un produit en te demandant s'il est dans un catalogue :)
SELECT * FROM CATALOGUE  
JOIN PRODUIT using(id_produit) ORDER BY id_boutique

par contre dans le catalogue il ne doit pas y avoir de colonne vide :mrgreen:


@+

Re: sql jointure et appel de données

Posté : 21 mai 2014, 14:46
par WENKz
pourquoi ne peut il pas y avoir de colonne vide ?

Re: sql jointure et appel de données

Posté : 21 mai 2014, 14:53
par WENKz
si je fais
order by id_boutique
ça me sépare complètement je souhaiterait avoir un résultat comme excel un produit dois afficher les prix des différentes boutiques sur la même ligne

Re: sql jointure et appel de données

Posté : 21 mai 2014, 19:57
par moogli
Donne le create table et un jeux de données de test.

Je comprends mieux ce que tu veux, mais une bonne explication c'est pas de refus, juste histoire d'être certain ;)


@+

Re: sql jointure et appel de données

Posté : 22 mai 2014, 14:30
par WENKz
Bonjour !
voili voilou
-- phpMyAdmin SQL Dump
-- version 3.4.10.1deb1
-- http://www.phpmyadmin.net
--
-- Client: localhost
-- Généré le : Jeu 22 Mai 2014 à 05:28
-- Version du serveur: 5.5.35
-- Version de PHP: 5.3.10-1ubuntu3.11

SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO";
SET time_zone = "+00:00";


/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8 */;

--
-- Base de données: `php`
--

-- --------------------------------------------------------

--
-- Structure de la table `BOUTIQUE`
--

CREATE TABLE IF NOT EXISTS `BOUTIQUE` (
  `id_boutique` int(11) NOT NULL AUTO_INCREMENT,
  `nom_boutique` varchar(255) DEFAULT NULL,
  `type` varchar(33) NOT NULL,
  PRIMARY KEY (`id_boutique`)
) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=14 ;

--
-- Contenu de la table `BOUTIQUE`
--

INSERT INTO `BOUTIQUE` (`id_boutique`, `nom_boutique`, `type`) VALUES
(12, 'boutique_1', 'INTERNE'),
(13, 'boutique_2', 'EXTERNE');

-- --------------------------------------------------------

--
-- Structure de la table `CATALOGUE`
--

CREATE TABLE IF NOT EXISTS `CATALOGUE` (
  `url` varchar(255) DEFAULT NULL,
  `prix` decimal(10,2) DEFAULT NULL,
  `solde` decimal(11,2) DEFAULT NULL,
  `ancien_prix` decimal(10,2) DEFAULT NULL,
  `stock` varchar(25) DEFAULT NULL,
  `ancien_stock` varchar(25) DEFAULT NULL,
  `id_produit` int(11) NOT NULL,
  `id_boutique` int(11) NOT NULL,
  PRIMARY KEY (`id_produit`,`id_boutique`),
  KEY `FK_catalogue_id_boutique` (`id_boutique`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

--
-- Contenu de la table `CATALOGUE`
--

INSERT INTO `CATALOGUE` (`url`, `prix`, `solde`, `ancien_prix`, `stock`, `ancien_stock`, `id_produit`, `id_boutique`) VALUES
(NULL, 1.20, NULL, NULL, NULL, NULL, 3220, 12),
('url_du_produit_de_la_boutique_2.fr', 1.30, NULL, NULL, NULL, NULL, 3220, 13),
(NULL, 3.00, NULL, NULL, NULL, NULL, 3221, 12);

-- --------------------------------------------------------

--
-- Structure de la table `PRODUIT`
--

CREATE TABLE IF NOT EXISTS `PRODUIT` (
  `id_produit` int(11) NOT NULL AUTO_INCREMENT,
  `ref` varchar(25) DEFAULT NULL,
  `nom_produit` varchar(25) DEFAULT NULL,
  PRIMARY KEY (`id_produit`)
) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=3222 ;

--
-- Contenu de la table `PRODUIT`
--

INSERT INTO `PRODUIT` (`id_produit`, `ref`, `nom_produit`) VALUES
(3220, 'ACBR-0003', 'Produit_1'),
(3221, 'ACBR-0002', 'Produit_2');

--
-- Contraintes pour les tables exportées
--

--
-- Contraintes pour la table `CATALOGUE`
--
ALTER TABLE `CATALOGUE`
  ADD CONSTRAINT `FK_catalogue_id_boutique` FOREIGN KEY (`id_boutique`) REFERENCES `BOUTIQUE` (`id_boutique`),
  ADD CONSTRAINT `FK_catalogue_id_produit` FOREIGN KEY (`id_produit`) REFERENCES `PRODUIT` (`id_produit`);

/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
dans ma table boutique je vais recupèrer toute les boutiques de concurrent dont la mienne, dans produit je vais mettre tout mes produit que je vends, dans catalogue je recupère url du concurrent et avec lie a un de mes produit j'insère ensuite leurs prix et leur stock dans ma partie affichage je souhaite faire quelque chose du style

<table>
<thead>
     <tr>
           <th>Nom produit</th>
           <th>Reference</th>
           <th>Mon prix</th>
           <th>Prix_concurent_1</th>
     </tr>
</thead>
<tbody>
      <tr>
           <td>Produit_1</td>
           <td>ACBR-0003</td>
           <td>1.3€</td>
           <td>1.4€</td>
      </tr>
</tbody>
</table> 


je vous met juste le html pour avoir l'idée de présentation si ça aide dans mon explication ;)

Re: sql jointure et appel de données

Posté : 17 sept. 2014, 11:48
par WENKz
Je repasse par ici car je n'ai toujours pas trouvé de solution :(