PB RQ exclusive sur 2 critères

Eléphanteau du PHP | 20 Messages

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
Take it HiSy !
Quand je vois ce que je développais il ya dix ans et ce que je développe aujourd'hui ... Je me dis que je serai super fort ... Dans Dix ans ....

Eléphant du PHP | 493 Messages

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";
}

Eléphanteau du PHP | 20 Messages

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 ...
Take it HiSy !
Quand je vois ce que je développais il ya dix ans et ce que je développe aujourd'hui ... Je me dis que je serai super fort ... Dans Dix ans ....

Eléphant du PHP | 493 Messages

14 sept. 2005, 10:21

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

Mammouth du PHP | 19672 Messages

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'];
}
?>
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

ViPHP
ViPHP | 1380 Messages

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
ripat

Mammouth du PHP | 19672 Messages

14 sept. 2005, 11:13

lol, bon ok, je vais me cacher :oops:
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Eléphanteau du PHP | 20 Messages

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
Take it HiSy !
Quand je vois ce que je développais il ya dix ans et ce que je développe aujourd'hui ... Je me dis que je serai super fort ... Dans Dix ans ....

Eléphanteau du PHP | 20 Messages

14 sept. 2005, 11:23

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

Ca marche pas ... :?
Take it HiSy !
Quand je vois ce que je développais il ya dix ans et ce que je développe aujourd'hui ... Je me dis que je serai super fort ... Dans Dix ans ....

ViPHP
ViPHP | 1380 Messages

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.
ripat