PB RQ exclusive sur 2 critères

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : PB RQ exclusive sur 2 critères

par Ripat » 14 sept. 2005, 12:15

N'aurais-tu pas oublié le WHERE ?

Sinon fais un SHOW CREATE TABLE aa et bb. Poste le résultat avec quelques valeurs type et j'essaye chez moi.

par HiSy » 14 sept. 2005, 11:23

Trop content d'avoir inserer du code ... J'ai oublié de finir mon tips :

Ca marche pas ... :?

par HiSy » 14 sept. 2005, 11:22

Y'a de l'idée :wink:

Si j'adapte la requete à mon structure de base :

Code : Tout sélectionner

SELECT * FROM aa LEFT JOIN bb ON CONCAT(aa.id, 'A') = CONCAT(bb.colChiffre, bb.colNombre ) CONCAT(bb.colChiffre, bb.colNombre ) IS NULL

par Cyrano » 14 sept. 2005, 11:13

lol, bon ok, je vais me cacher :oops:

par Ripat » 14 sept. 2005, 10:43

Ceci ?

Code : Tout sélectionner

SELECT * FROM aa LEFT JOIN bb ON CONCAT(aa.id, 'A') = bb.col WHERE bb.col IS NULL

par Cyrano » 14 sept. 2005, 10:32

Bon, je ne sais pas si ça fonctionne, je n'ai pas testé, mais grosso modo, il faut faire ça en deux requêtes. La première récupère la liste des chiffres de la première able et on met la liste des résultats dans un tableau indexé. Avec ce tableau, on construit dynamiquement une seconde requête sur la table BB : voici une proposition, je ne garantis cependant rien, j'ai un doute sur l,acceptation du NOT LIKE avec MySQL 4.0, à tester :
<?php
/* On récupère les chiffres existat dans la première table */
$sql1 = "SELECT numero FROM AA";
$chiffres = array();
$requete1 = mysql_query($sql1);
while($ligne = mysql_fetch_assoc($requete1))
{
    $chiffres[] = $ligne['numero'];
}

/* On crée une variable de test */
$lettre = "A";
/* On construit dynamiquement une seconde requête */
$sql2 = "SELECT numero 
FROM BB
WHERE numero LIKE '". $lettre ."%'";
foreach($chiffres as $chiffre)
{
    $sql2 .= " AND numero NOT LIKE ". $lettre . $chiffre;
}
/* Exécution de la requête */
$requete2 = mysql_query($sql2);
$liste = array();
/* Récupération de la liste de résultats */
while($ligne2 = mysql_fetch_assoc($requete2))
{
    $liste[] = $ligne2['numero'];
}
?>

par Vaedan » 14 sept. 2005, 10:21

serait-il possible d'avoir la structure complete des tables en MySQL stp ?[/code]

Je me suis mal exprimé ...

par HiSy » 14 sept. 2005, 10:09

Je me suis surement mal exprimé .

Dans ma table BB j'ai 2 champs ( entre autres )

Le premier contenant le numéro et le second contenant la lettre.

L'idée de traiter ca avec des tableaux me semble un peu difficile à réaliser ... D'autant que je peux avoir des centaines de cas ...

Merci quand meme ...

par Vaedan » 14 sept. 2005, 09:46

je n'ai aucune idée sur la manière d'obtenir ceci ! je te propose cependant une alternative en PHP :?
//
// On suppose que les données ont été récupérées puis
// classées dans un tableau de la manière suivante :
// ARRAY[ CONTENU ] = true
//
// ex: $row_BB[ '2C' ] = true;
//

// Contenu de la tableau AA
$row_AA = array( ... );

// Contenu de la tableau BB
$row_BB = array( ... );

foreach ( $row_BB as $nb => $flag )
{
    // On suppose que le champ contenant le nombre
    // s'appelle 'nb'
    preg_match( '°^([0-9]+)[a-z]+$°i', $nb, $tmp );
    // On récupère ainsi le nombre qui est suivi d'une lettre

    if ( isset( $row_AA[ (string)$tmp[ 0 ] ] ) )
        echo '<b>', $nb, '</b> est présent dans AA', "\n";
}

PB RQ exclusive sur 2 critères

par HiSy » 14 sept. 2005, 09:10

Bonjour

Je me heurte à une requete qui dépasse mon niveau ...

J'essaye d'expliquer :

J'ai une table AA contenant une liste de numéros et une table BB contenant aussi des numéros mais affectés à une lettre.

Je voudrais la liste des numéros de la table AA qui ne sont pas affecté à une lettre donnée dans la table BB.

Exemple :

AA : 1 ; 2 ; 3 ; 4 ; 5 ; 6 ; 7 ; 8 ; 9

BB : 1A ; 1B ; 2C ; 3D; 3C; 4E; 4B; 5A; 5F ;

Soit A la lettre donnée, je voudrais récupérer : 2 ; 3 ; 4

Je veux donc exclure 1 et 5 parce qu'il existe les coupes 1A et 5A dans la table BB...

Le tout réalisé dans un envirronement MySQL 4.0.15 ( Pas de sous requete )

Merci par avance