Sélectionnés tous ceux qui ne sont pas dans la table - PHP - Programmation
Marsh Posté le 18-05-2011 à 12:26:56
Ton code n'est pas trop facile à comprendre car dense mais je pense qu'en une seul requête tu aurais pu avoir ta réponse. Il faut faire une jointure avec de LEFT JOIN avec un clause sur les valeurs NULL.
Code :
|
Cette requête va te retourner toute les lignes de la table T1 qui n'ont pas de lien avec la table T2.
- Si à la place de LEFT tu places INNER et que tu retires la clause cela va te donner toute les lignes ayant des correspondance entre les deux tables T1 et T2.
- Si à la place du LEFT tu places RIGHT, dans la clause tu places T1.monChamp IS NULL la situation s'inverse par rapport au premier cas. Il va retourner toute les lignes qui dans T2 n'ayant pas de correspondance dans T1.
Code :
|
Si c'est que tu souhaitais faire ce type de requête pourrait te réduire un certain nombre de ligne de code PHP.
Marsh Posté le 27-05-2011 à 18:09:23
Bonjour,
je comprend le principle de T1 et T2 mais cela ne fonctionne pas dans mon cas.
cela fonctionnerais si je voulais comparer une table avec une autre. Mais l'affaire c'est que j'ai deux tables que je veux compater avec une troisième.
Exemple:
yellow_alert : colonne: email_parents
yellow_Agents_garderies : colonne: AgentID_garderies
yellow_alert_sended : colonne: fusion
lorsque le courriel est envoyé aux parents pour lui avisé qu'une garderie est disponible selon les critaires du parent, immédiatement après l'envoie du courriel je log la yellow_alert_sended dans la colonne fusion et je fusionne le mail du parents avec le ID de la garderie. comme cesi:
// après que le mail soit envoyé on log l'envoie dans la table yellow_alert_sended pour pouvoir vérifier avant l'envoie à savoir si le mail a déja été envoyé
<code>mysql_query("insert into yellow_alert_sended set fusion = '$aexp[email_parents]$aexp[AgentID_garderies]'" ); </code>
MON BUT:
Donc la prochaine vérification avant l'envoie du courriel, je voudrais récupérer les email des parents via la yellow_alert et récupérer les id des garderies via la yellow_Agents_garderies seulement si ils ne sont pas dans la table: yellow_alert_sended.
dans la colonne fusion nous pouvons voir le mail du parent et le id de la garderie dans le même champs:
parent@domain.com1039
j'ai essayer ceci selon ton exemple de code mais cela ne fonctionne pas.
pouvez-vous m'aidé un peu encore ?
<code> // vérifier les correspondances entre les annonces des garderies et les recherches(alert) des parents enregistrer.
$qexpa = "select DISTINCT * from yellow_alert, yellow_agents_garderies where
yellow_alert.statut_Alert = 'active' &&
yellow_alert.statut_Alert = yellow_agents_garderies.statut_annonceID &&
yellow_alert.CategoryList = yellow_agents_garderies.CategoryID &&
yellow_alert.Provinces = yellow_agents_garderies.Provinces &&
yellow_alert.state = yellow_agents_garderies.state && (SELECT '$aparaa$agarderies' AS '$aparaa$agarderies' LEFT JOIN yellow_alert_sended AS yellow_alert_sended ON '$aparaa$agarderies' = yellow_alert_sended.fusion WHERE yellow_alert_sended.fusion IS NULL)";
$rexpa = mysql_query($qexpa) or die(mysql_error());
if(mysql_num_rows($rexpa) > '0')</code>
Marsh Posté le 16-05-2011 à 19:25:48
Bonjour,
J’aimerais sélectionner toutes les adresses courriel qui ne sont pas dans la table.
Pouvez-vous me dire ce qui ne fonctionne pas dans mon code ?
Le but est de récupérer les adresses courriel des parents avec les Id des garderies qui n’ont pas déjà été avisés (qui ne sont pas dans la table yellow_Alert_sended).
Quand l’avis courriel est envoyé, l’envoie est logé dans yellow_alert_sended et on s’y réfère pour ne pas envoyer un autre avis en double lors de la prochaine exécution.
Le problème est qu’aussitôt qu’une ligne est trouvée dans la table yellow_alert.sended, le script exit immédiatement sans continuer pour trouver les autres qui ne sont pas dedans.
Voici
merci d'avance pour votre aide