IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage SQL Discussion :

Recherche multicritères sur plusieurs tables


Sujet :

Langage SQL

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 26
    Points : 8
    Points
    8
    Par défaut Recherche multicritères sur plusieurs tables
    Bonsoir,
    J'ai un formulaire de recherche multicritères contenant des boutons radio et des cases à cocher, il va piocher dans plusieurs tables pour afficher les résultats selon le choix des critères.
    J'ai une table "appartements", une table "maisons", une table "transactions" (Acheter ou Louer), une table "themes" (appartement, maison) et une table "pieces" (T1, T2, T3, T4, T5).
    Les tables "appartements" et "maisons" contiennent toutes les deux des clès étrangères pour faire le lien avec les autres table, à savoir, "transactionID", "rubriqueID" et "piecesID"
    Ce que je veut, c'est l'orsqu'on coche par exemple le bouton Acheter, la case Appartement et la case T1, il va questionner la table appartement pour sortir les critères demandés, la même chose si on coche la case maison.
    Voilà le code que j'ai écrit et qui ne marche pas encore:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    SELECT r.theme, a.Reference,  p.nombre, t.ID
    FROM transactions t  INNER JOIN appartements a ON a.transactionID=t.ID
    WHERE a.transactionID=colbien  INNER JOIN rubriques r ON a.rubriqueID=r.ID WHERE a.rubriqueID=coltheme INNER JOIN pieces p ON a.piecesID=p.ID WHERE a.piecesID=colnombre
    union ALL
    SELECT r.theme, m.Reference,  p.nombre, t.ID
    FROM transactions t  INNER JOIN maisons m ON m.transactionID=t.ID
    WHERE m.transactionID=colbien  INNER JOIN rubriques r ON m.rubriqueID=r.ID WHERE m.rubriqueID=coltheme INNER JOIN pieces p ON m.piecesID=p.ID WHERE m.piecesID=colnombre
     
    colbien=$_GET['transactionID']
    coltheme=$_GET['rubriqueID']
    colpieces[$_GET['piecesID']
    Merci

  2. #2
    Membre actif
    Inscrit en
    Janvier 2012
    Messages
    145
    Détails du profil
    Informations forums :
    Inscription : Janvier 2012
    Messages : 145
    Points : 226
    Points
    226
    Par défaut
    Juste comme ça, le champ Reference (pour M et A) est il bien défini à l'identique? Sinon quelle est la sortie et quel est l'éventuel message d'erreur?

  3. #3
    Expert éminent sénior
    Homme Profil pro
    Responsable Données
    Inscrit en
    Janvier 2009
    Messages
    5 243
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable Données

    Informations forums :
    Inscription : Janvier 2009
    Messages : 5 243
    Points : 12 874
    Points
    12 874
    Par défaut
    Bonjour,
    La requête ne "fonctionne" pas car elle est syntaxiquement incorrecte.
    Dans une jointure, il faut utiliser ON, et non WHERE pour spécifier les conditions:
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
     
    SELECT r.theme, a.Reference,  p.nombre, t.ID
    FROM transactions t
    INNER JOIN appartements a ON a.transactionID=t.ID and a.transactionID=colbien
    INNER JOIN rubriques r ON a.rubriqueID=r.ID and a.rubriqueID=coltheme
    INNER JOIN pieces p ON a.piecesID=p.ID and a.piecesID=colnombre
    union ALL
    ...

    Je ne sais pas quel langage tu utilises, mais je pense que ce dernier peut te renvoyer le message d'erreur retourné par la base de données. Celui-ci t'aurai certainement indiqué la cause de l'erreur.

    Tatayo.

  4. #4
    Futur Membre du Club
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 26
    Points : 8
    Points
    8
    Par défaut
    Merci beaucoup pour la réponse. En faite je n'est pas de message d'erreur simplement rien ne s'affiche sur ma page résultats.
    j'ai modifié mon code entre temps, j'obtiens des résultats, par contre si je coche appartements et maisons en même temps il m'affiche que les résultats de maisons.
    pareil, quand je coche T1, T2 ensemble, il m'affiche que les T2.
    Voilà le code que j'ai utilisé:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    SELECT a.rubriqueID , a.transactionID, a.piecesID, a.Reference,  a.Libelle FROM appartements a WHERE a.rubriqueID =coltheme AND a.transactionID=colbien AND a.piecesID=colnombre UNION ALL  SELECT m.rubriqueID , m.transactionID, m.piecesID, m.Reference, m.Libelle
    FROM maisons m
    WHERE m.rubriqueID =coltheme AND m.transactionID=colbien AND m.piecesID=colnombre
    Je vais tester ton code pour voir ce que ca donne et je reviens.
    Merci

  5. #5
    Futur Membre du Club
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 26
    Points : 8
    Points
    8
    Par défaut
    Je reviens vers toi tatayo, voilà le message d'erreur après avoir testé ton code:
    #1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'LIMIT 0, 30' at line 3
    Je suis sur php Myadmin version 5.0.5

  6. #6
    Expert éminent sénior
    Homme Profil pro
    Responsable Données
    Inscrit en
    Janvier 2009
    Messages
    5 243
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable Données

    Informations forums :
    Inscription : Janvier 2009
    Messages : 5 243
    Points : 12 874
    Points
    12 874
    Par défaut
    Sans la requête ni le code qui l'utilise, difficile de savoir ce qui ne va pas.
    Par exemple l'erreur fait mention de la clause Limit, que je ne vois nul part...
    A quoi correspond colbien, colnombre, coltheme ? Si ce sont des critères renseignés par l'utilisateur, que contiennent-ils quand l'utilisateur ne renseigne rien ?

    Tatayo.

  7. #7
    Futur Membre du Club
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 26
    Points : 8
    Points
    8
    Par défaut
    Voilà le code que j'utilise avec la requête
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
     
    <?php require_once('Connections/ConnexionBoutiquedream.php'); ?>
     
    <?php  
    if(!isset($_GET['rubriqueID'])) $_GET['rubriqueID']=""; 
    if(!isset($_GET['transactionID'])) $_GET['transactionID']="2"; 
    if(!isset($_GET['piecesID'])) $_GET['piecesID']="";
    ?>
    <?php
     
    if (!function_exists("GetSQLValueString")) {
    function GetSQLValueString($theValue, $theType, $theDefinedValue = "", $theNotDefinedValue = "") 
    {
      if (PHP_VERSION < 6) {
        $theValue = get_magic_quotes_gpc() ? stripslashes($theValue) : $theValue;
      }
     
      $theValue = function_exists("mysql_real_escape_string") ? mysql_real_escape_string($theValue) : mysql_escape_string($theValue);
     
      switch ($theType) {
        case "text":
          $theValue = ($theValue != "") ? "'" . $theValue . "'" : "NULL";
          break;    
        case "long":
        case "int":
          $theValue = ($theValue != "") ? intval($theValue) : "NULL";
          break;
        case "double":
          $theValue = ($theValue != "") ? doubleval($theValue) : "NULL";
          break;
        case "date":
          $theValue = ($theValue != "") ? "'" . $theValue . "'" : "NULL";
          break;
        case "defined":
          $theValue = ($theValue != "") ? $theDefinedValue : $theNotDefinedValue;
          break;
      }
      return $theValue;
    }
    }
     
    mysql_select_db($database_ConnexionBoutiquedream, $ConnexionBoutiquedream);
    $query_rsTheme = "SELECT * FROM rubriques ORDER BY theme ASC";
    $rsTheme = mysql_query($query_rsTheme, $ConnexionBoutiquedream) or die(mysql_error());
    $row_rsTheme = mysql_fetch_assoc($rsTheme);
    $totalRows_rsTheme = mysql_num_rows($rsTheme);
     
    $maxRows_rsCatalogue = 5;
    $pageNum_rsCatalogue = 0;
    if (isset($_GET['pageNum_rsCatalogue'])) {
      $pageNum_rsCatalogue = $_GET['pageNum_rsCatalogue'];
    }
    $startRow_rsCatalogue = $pageNum_rsCatalogue * $maxRows_rsCatalogue;
     
    $coltheme_rsCatalogue = "1";
    if (isset($_GET['rubriqueID'])) {
      $coltheme_rsCatalogue = $_GET['rubriqueID'];
    }
    $colsurface_rsCatalogue = "1";
    if (isset($_GET['VARsurface'])) {
      $colsurface_rsCatalogue = $_GET['VARsurface'];
    }
    $colnombre_rsCatalogue = "1";
    if (isset($_GET['piecesID'])) {
      $colnombre_rsCatalogue = $_GET['piecesID'];
    }
    $colbien_rsCatalogue = "1";
    if (isset($_GET['transactionID'])) {
      $colbien_rsCatalogue = $_GET['transactionID'];
    }
    mysql_select_db($database_ConnexionBoutiquedream, $ConnexionBoutiquedream);
    $query_rsCatalogue = sprintf("SELECT a.rubriqueID , a.transactionID, a.piecesID, a.Surface, a.Reference,  a.Libelle FROM appartements a WHERE a.rubriqueID =%s AND a.transactionID=%s AND a.piecesID=%s UNION ALL  SELECT m.rubriqueID , m.transactionID, m.piecesID, m.Reference, m.Libelle FROM maisons m WHERE m.rubriqueID =%s AND m.transactionID=%s AND m.piecesID=%s , GetSQLValueString($coltheme_rsCatalogue, "int"),GetSQLValueString($colbien_rsCatalogue, "int"),GetSQLValueString($colnombre_rsCatalogue, "int"),GetSQLValueString($coltheme_rsCatalogue, "int"),GetSQLValueString($colbien_rsCatalogue, "int"),GetSQLValueString($colnombre_rsCatalogue, "int"));
    $query_limit_rsCatalogue = sprintf("%s LIMIT %d, %d", $query_rsCatalogue, $startRow_rsCatalogue, $maxRows_rsCatalogue);
    $rsCatalogue = mysql_query($query_limit_rsCatalogue, $ConnexionBoutiquedream) or die(mysql_error());
    $row_rsCatalogue = mysql_fetch_assoc($rsCatalogue);
     
    if (isset($_GET['totalRows_rsCatalogue'])) {
      $totalRows_rsCatalogue = $_GET['totalRows_rsCatalogue'];
    } else {
      $all_rsCatalogue = mysql_query($query_rsCatalogue);
      $totalRows_rsCatalogue = mysql_num_rows($all_rsCatalogue);
    }
    $totalPages_rsCatalogue = ceil($totalRows_rsCatalogue/$maxRows_rsCatalogue)-1;
     
    mysql_select_db($database_ConnexionBoutiquedream, $ConnexionBoutiquedream);
    $query_rsbien = "SELECT * FROM transactions ORDER BY bien ASC";
    $rsbien = mysql_query($query_rsbien, $ConnexionBoutiquedream) or die(mysql_error());
    $row_rsbien = mysql_fetch_assoc($rsbien);
    $totalRows_rsbien = mysql_num_rows($rsbien);
     
    mysql_select_db($database_ConnexionBoutiquedream, $ConnexionBoutiquedream);
    $query_rsnombre = "SELECT * FROM pieces ORDER BY nombre ASC";
    $rsnombre = mysql_query($query_rsnombre, $ConnexionBoutiquedream) or die(mysql_error());
    $row_rsnombre = mysql_fetch_assoc($rsnombre);
    $totalRows_rsnombre = mysql_num_rows($rsnombre);
    ?>
     
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    </head>
     
    <body>
    <
    <div class="content1">
          <table width="100%" border="0">
            <?php do { ?>
              <tr>
                <td><?php echo $row_rsCatalogue['Reference']; ?></td>
                <td><?php echo $row_rsCatalogue['Libelle']; ?></td>
              </tr>
              <?php } while ($row_rsCatalogue = mysql_fetch_assoc($rsCatalogue)); ?>
          </table>
             </div>
     
    <div class="sidebar2">
      	    <form name="form1" method="get" action="">
        <table width="100%" border="0" class="table5" >
      <tr>
        <td colspan="2" style="color:#FFF"><label>
                        <input <?php if (!(strcmp($_GET['transactionID'],"1"))) {echo "checked=\"checked\"";} ?> <?php if (!(strcmp($_GET['transactionID'],1))) {echo "checked=\"checked\"";} ?> type="radio" name="transactionID" value="1" id="transaction_0" />
                  Acheter</label></td>
        <td colspan="2" style="color:#FFF"><label>
                        <input <?php if (!(strcmp($_GET['transactionID'],"2"))) {echo "checked=\"checked\"";} ?> type="radio" name="transactionID" value="2" id="transactionID_1" />
                  Louer</label></td>
      </tr>
      <tr>
        <td colspan="4" style="color:#FFF"><span style="color:#e6e8e9; font-size:12px; font-weight:bold" >TYPE(S) DE BIENS</span></td>
        </tr>
      <tr>
        <td colspan="2" style="color:#FFF"><label>
                        <input <?php if (!(strcmp($_GET['rubriqueID'],1))) {echo "checked=\"checked\"";} ?> type="checkbox" name="rubriqueID" value="1" id="rubriqueID_0" />
                  Appartement</label></td>
        <td colspan="2" style="color:#FFF"><label>
                        <input  type="checkbox" name="rubriqueID" value="2" id="rubriqueID_1" />
                  Maison</label></td>
        </tr>
    <tr>
        <td style="color:#FFF"><label>
                        <input <?php if (!(strcmp($_GET['piecesID'],1))) {echo "checked=\"checked\"";} ?> type="checkbox" name="piecesID" value="1" id="piecesID_0" checked="checked"/>
                T1</label></td>
        <td style="color:#FFF"><label>
                        <input type="checkbox" name="piecesID" value="2" id="piecesID_1" />
                        T2</label></td>
        <td style="color:#FFF"><label>
                    <input  name="piecesID" type="checkbox" id="piecesID_2" value="3"/>
                T3</label></td>
        <td style="color:#FFF"><label>
                    <input  name="piecesID" type="checkbox" id="piecesID_3" value="4"/>
                T4</label></td>
      </tr>
      <tr>
        <td style="color:#FFF"><label>
                    <input  name="piecesID" type="checkbox" id="piecesID_4" value="5"/>
                T5+</label></td>
        <td>&nbsp;</td>
        <td colspan="2">&nbsp;</td>
      </tr>
    <tr>
        <td colspan="4" align="center"><input type="submit" name="button" id="button" value="Rechercher" /></td>
      </tr>
        </table>
        </form>
    </div>
    </body>
    </html>
    <?php
    mysql_free_result($rsTheme);
     
    mysql_free_result($rsCatalogue);
     
    mysql_free_result($rsbien);
     
    mysql_free_result($rsnombre);
     
    ?>
    Merci pour ton aide Tatayo.

  8. #8
    Membre actif
    Inscrit en
    Janvier 2012
    Messages
    145
    Détails du profil
    Informations forums :
    Inscription : Janvier 2012
    Messages : 145
    Points : 226
    Points
    226
    Par défaut
    Ligne 72, tu n'as pas un problème de guillemets?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    $query_rsCatalogue = sprintf("SELECT a.rubriqueID , a.transactionID, a.piecesID, a.Surface, a.Reference,  a.Libelle FROM appartements a WHERE a.rubriqueID =%s AND a.transactionID=%s AND a.piecesID=%s UNION ALL  SELECT m.rubriqueID , m.transactionID, m.piecesID, m.Reference, m.Libelle FROM maisons m WHERE m.rubriqueID =%s AND m.transactionID=%s AND m.piecesID=%s , GetSQLValueString($coltheme_rsCatalogue, int"),
    GetSQLValueString($colbien_rsCatalogue,"int"),
    GetSQLValueString($colnombre_rsCatalogue,"int"),
    GetSQLValueString($coltheme_rsCatalogue,"int"),
    GetSQLValueString($colbien_rsCatalogue,int"),
    GetSQLValueString($colnombre_rsCatalogue, "int"));
    que je remplacerais par :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    $query_rsCatalogue = sprintf("SELECT a.rubriqueID , a.transactionID, a.piecesID, a.Surface, a.Reference,  a.Libelle FROM appartements a WHERE a.rubriqueID =%s AND a.transactionID=%s AND a.piecesID=%s UNION ALL  SELECT m.rubriqueID , m.transactionID, m.piecesID, m.Reference, m.Libelle FROM maisons m WHERE m.rubriqueID =%s AND m.transactionID=%s AND m.piecesID=%s ", GetSQLValueString($coltheme_rsCatalogue, int"),
    GetSQLValueString($colbien_rsCatalogue,"int"),
    GetSQLValueString($colnombre_rsCatalogue,"int"),
    GetSQLValueString($coltheme_rsCatalogue,"int"),
    GetSQLValueString($colbien_rsCatalogue,int"),
    GetSQLValueString($colnombre_rsCatalogue, "int"));

  9. #9
    Futur Membre du Club
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 26
    Points : 8
    Points
    8
    Par défaut
    Bien vue KookieMonster, effectivement il manque les guillemets,
    Seulement cela ne me resoud pas le problème d'afficher les appartements et les maisons sur la même page si les deux cases sont cochées, pareil si on coche les T1 et T2 en même temps.

  10. #10
    Membre actif
    Inscrit en
    Janvier 2012
    Messages
    145
    Détails du profil
    Informations forums :
    Inscription : Janvier 2012
    Messages : 145
    Points : 226
    Points
    226
    Par défaut
    @Waldar: merci pour les balises code, je m'en servirais à l'avenir.
    @bili31: désolé, je n'arrive pas à voir ce qui ne va pas dans la requête réalisant l'union des apparts et maisons (sous réserve que les types sont identiques pour les différentes colonnes...).

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    SELECT a.rubriqueID , a.transactionID, a.piecesID, a.Surface, a.Reference,  a.Libelle 
    FROM appartements a 
    WHERE a.rubriqueID =%s AND a.transactionID=%s AND a.piecesID=%s 
     
    UNION ALL  
     
    SELECT m.rubriqueID , m.transactionID, m.piecesID, m.Reference, m.Libelle
    FROM maisons m 
    WHERE m.rubriqueID =%s AND m.transactionID=%s AND m.piecesID=%s
    Quels sont les problèmes / messages d'erreurs que tu rencontres?

  11. #11
    Membre actif
    Inscrit en
    Janvier 2012
    Messages
    145
    Détails du profil
    Informations forums :
    Inscription : Janvier 2012
    Messages : 145
    Points : 226
    Points
    226
    Par défaut
    je me réponds tout seul, prouvant ainsi l'utilité de #code !
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    SELECT a.rubriqueID , a.transactionID, a.piecesID, a.Surface, a.Reference,  a.Libelle 
    FROM appartements a 
    WHERE a.rubriqueID =%s AND a.transactionID=%s AND a.piecesID=%s 
     
    UNION ALL  
     
    SELECT m.rubriqueID , m.transactionID, m.piecesID, m.Surface, m.Reference, m.Libelle
    FROM maisons m 
    WHERE m.rubriqueID =%s AND m.transactionID=%s AND m.piecesID=%s

  12. #12
    Futur Membre du Club
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 26
    Points : 8
    Points
    8
    Par défaut
    Merci beaucoup!

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [MySQL] Recherche multicritères sur plusieurs tables
    Par bili31 dans le forum PHP & Base de données
    Réponses: 14
    Dernier message: 07/03/2012, 20h17
  2. [MySQL] recherche multicritères sur plusieurs table
    Par rvm31 dans le forum PHP & Base de données
    Réponses: 6
    Dernier message: 24/11/2007, 17h42
  3. recherche multicritères sur deux tables
    Par amélie22 dans le forum Access
    Réponses: 1
    Dernier message: 16/06/2006, 11h59
  4. recherche multicritères sur plusieurs tables
    Par amélie22 dans le forum Access
    Réponses: 1
    Dernier message: 16/06/2006, 09h48
  5. Recherche multicritère sur plusieurs tables
    Par Nabouille dans le forum Access
    Réponses: 3
    Dernier message: 12/04/2006, 18h39

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo