> Tous les forums > Forum des Webmasters
 Problème avec COUNT et jointureSujet résolu
Ajouter un message à la discussion
Page : [1] 
Page 1 sur 1
chester80
  Posté le 24/01/2018 @ 08:34 
Aller en bas de la page 
Petit astucien

Bonjour à tous,

Je suis entrain de créer un script où l'utilisateur entre un code promo.

Si le code existe alors on vérifie s'il ne l'a pas déjà utilisé.

Avec mon script, il ne l'a jamais utilisé. Je ne vois pas où est l'erreur

--
-- Structure de la table `promotions`
--

CREATE TABLE IF NOT EXISTS `promotions` (
`promo_id` int(11) NOT NULL AUTO_INCREMENT,
`code_promo` varchar(100) COLLATE latin1_general_ci NOT NULL,
PRIMARY KEY (`promo_id`),
UNIQUE KEY `promo_id` (`promo_id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci AUTO_INCREMENT=2 ;

--
-- Contenu de la table `promotions`
--

INSERT INTO `promotions` (`promo_id`, `code_promo`) VALUES
(1, 'ATTACHES');

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

--
-- Structure de la table `promotions_membres`
--

CREATE TABLE IF NOT EXISTS `promotions_membres` (
`promomembre_id` int(11) NOT NULL AUTO_INCREMENT,
`membre_id` int(11) NOT NULL,
`promo_id` int(11) NOT NULL,
`commande_id` int(11) NOT NULL,
PRIMARY KEY (`promomembre_id`),
UNIQUE KEY `promomembre_id` (`promomembre_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=2 ;

--
-- Contenu de la table `promotions_membres`
--

INSERT INTO `promotions_membres` (`promomembre_id`, `membre_id`, `promo_id`, `commande_id`) VALUES
(1, 35, 1, 1);

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

Mon code php

if(isset($_POST['promo']))
{
$promo = $_POST['promo'];

$stmt = $bdd->prepare("SELECT COUNT(promo_id) AS nbr FROM promotions WHERE code_promo=:promo");
$stmt->execute(array(
'promo' => $promo));
$resultat = $stmt->fetch();


if($resultat['nbr'] > 0)
{
$stmt = $bdd->prepare("SELECT pm.promo_id, p.code_promo, COUNT(pm.promomembre_id)
FROM promotions_membres AS pm
INNER JOIN promotions AS p
ON pm.promo_id = p.promo_id
WHERE membre_id = :membre_id AND p.code_promo = :code_promo");
$stmt->execute(array(
'membre_id' => $_SESSION['membre_id'],
'code_promo' => $promo));
$resultat = $stmt->fetch();
if($resultat['nbr'] > 0)
{

$message="code déjà utilisé<br />Veuillez nous contacter si vous pensez à une erreur.";
}
else
{
$message="code enregistré";
}
}
else
{
$message="code déjà utilisé ou erroné<br />Veuillez nous contacter si vous pensez à une erreur.";
}


}

Merci pour votre aide

Publicité
Malcolm
 Posté le 24/01/2018 à 19:50 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
  Astucien

Salut,

je ne comprends pas ta logique ...

Tu fais 2 requêtes : la première "SELECT COUNT(promo_id) AS nbr FROM promotions WHERE code_promo=:promo"); permet de savoir si le code promo existe.

Pourquoi faire cette jointure dans la seconde pour revérifier cette info ?

moi je ferais dans la 2è requête le count sur promo membres ID, lié à la table promos : s'il y a une ligne, c'est que ce code existe et a été utilisé par ce membre (car c'est bien l'ID de l'utilisation que tu dois compter)

De là, on veut s'assurer que le membre n'a pas utilisé le code promo donc on compte toutes les occurrences d'utilisations (pm.promomembre_id) avec membre_id=35 (pour ton exempleà et code promo = ATTACHES (pour ton exemple toujours). Tu sauras réinjecter les variables dans la requête avec ton PS.


SELECT
p.promo_id
FROM
promotions_membres pm
LEFT JOIN promotions p ON pm.promo_id = p.promo_id
WHERE
membre_id = '35' AND p.code_promo = 'ATTACHES'
HAVING
COUNT(pm.promomembre_id) = 0

chester80
 Posté le 24/01/2018 à 21:35 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Petit astucien

Merci cela fonctionne

Page : [1] 
Page 1 sur 1

Vous devez être connecté pour participer à la discussion.
Cliquez ici pour vous identifier.

Vous n'avez pas de compte ? Créez-en un gratuitement !
Recevoir PC Astuces par e-mail


La Lettre quotidienne +226 000 inscrits
Avec l'actu, des logiciels, des applis, des astuces, des bons plans, ...

Les bonnes affaires
Une fois par semaine, un récap des meilleurs offres.

Les fonds d'écran
De jolies photos pour personnaliser votre bureau. Une fois par semaine.

Les nouveaux Bons Plans
Des notifications pour ne pas rater les bons plans publiés sur le site.

Les bons plans du moment PC Astuces

Tous les Bons Plans
499,99 €Vélo assistance électrique Xiaomi Mi Smart pliable à 499,99 €
Valable jusqu'au 25 Juillet

Fnac fait une promotion sur le vélo à assistance électrique Xiaomi Mi Smart pliable qui passe à 499,99 € au lieu de 799 €. Ce vélo pliable 16 pouces offre une autonomie de 45 km et une vitesse jusqu'à 25 km/h. 


> Voir l'offre
999,99 €Portable 15,6' Lenovo Legion 5 (Ryzen 5, 8Go, SSD 512Go, RTX3060) à 999,99 €
Valable jusqu'au 25 Juillet

Cdiscount fait une promotion sur le PC portable Lenovo Legion 5 (15ACH6H) dédié aux joueurs qui passe à 999,99 € au lieu de 1300 €. Ce PC portable très bien équipé possède un écran 15,6 pouces LED Full HD, un processeur AMD Ryzen 5 5600H, 8 Go de RAM, un SSD de 512 Go et une carte graphique GeForce RTX 3060 6 Go dédiée qui avalera tous vos jeux sans broncher. Il est fourni sans OS, mais vous pouvez facilement installer Windows 10.


> Voir l'offre
174,09 €SSD Crucial MX500 2 To à 174,09 € livré
Valable jusqu'au 25 Juillet

Amazon Allemagne propose actuellement le SSD Crucial MX500 2 To à 169,48 € (avec la TVA ajustée). Comptez 4,61 € pour la livraison en France soit un total de 174,09 € livré. On le trouve ailleurs à partir de 200 €. Ce SSD salué par la critique par son rapport qualité prix imbattable offre des débits de 560 Mo/s en lecture et 510 Mo/s en écriture. Il est garanti 5 ans. 

Vous pouvez utiliser votre compte Amazon France sur Amazon Allemagne et il n'y a pas de douanes. Si vous êtes perdu en allemand, vous pouvez traduire le site en anglais.


> Voir l'offre

Sujets relatifs
Problème avec jointure
Problème avec jointure
Problème avec http://www. et http://
CSS - Problème avec image et zoom
Probleme avec EDGE et Chrome
problème avec les caractères accentué dans mes liens
Problème avec free
problème avec fichier "xxx.klm"
problème avec google
Problème avec le panel d'un hébergeur d'image
Plus de sujets relatifs à Problème avec COUNT et jointure
 > Tous les forums > Forum Forum des Webmasters