2011-10-17 3 views
0

J'ai problème avec requête SQL,requête SQL avec PHP - extraire des données d'une colonne séparées par des virgules et liés

J'ai deux tables

** T1 ** 
ID | Cat 
--------- 
1 | TEXT 

2 | TTTT 

...

** T2 ** 

**ID | TEXT | AutID | T1ID | TEXT2 | TEXT ...** 

1 | text | $ID | 1,2 | text | text 

2 | text | $ID | 3,4,6 | text | text 

et j'ai besoin de sql query pour récupérer les données de la table 2 (t2) de la colonne t1.ID mais toutes les données dans row1 = 1,2 et dans row2 = 3,4,6 et comment je peux créer un lien à partir de ça.

Ce que je pour l'instant est

$query = "SELECT * 
FROM T2, T1 
WHERE AutID=$ID 
AND T1.Id=T2.T1ID"; 

et pour le lien je utiliser while

$catName = $row["Cat"]; 
$catID = $row["Id"]; 

echo "<a href=file.php?ID=".$catID . ">" .$catName."</a> 

Répondre

0

parce que vous stockez plusieurs clés dans la colonne T1ID vous devez interroger les données, diviser en deux clés en php, puis effectuer une deuxième requête pour obtenir les données que vous voulez

il existe de meilleurs moyens de concevoir une base de données, si cela est une possibilité alors je voudrais voir une refonte , Mais si vous êtes coincé avec cette structure, vous pouvez effectuer les opérations suivantes

$query = "SELECT * FROM T2 WHERE AutID=$ID"; 

$res = mysql_query($query) || die(mysql_error()); 

while ($row = mysql_fetch_assoc($res)) { 

    $keys = explode(',', $row['T1ID']); 

    foreach ($keys as $key) { 
     $query2 = "SELECT * FROM T1 WHERE ID=$key"; 

     $res2 = mysql_query($query2) || die(mysql_error()); 

     // do what you want with your data now 
    } 
} 
1

Pour améliorer la réponse de bumperbox et réduire les requêtes au serveur. Plutôt que de faire plusieurs requêtes, vous pouvez utiliser une instruction IN:

$query2 = "SELECT * FROM T1 WHERE ID in (" . explode(',', $row['T1ID']) . ")"; 
$res2 = mysql_query($query2) || die(mysql_error()); 
Questions connexes