使用PHP进行SQL查询 - 从一个以逗号分隔并链接的列中获取数据

时间:2011-10-17 22:24:42

标签: php sql

我的SQL查询有问题,

我有两张桌子

** 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

我需要sql查询从列t1.ID获取表2(t2)中的数据,但是row1 = 1,2和row2 = 3,4,6中的所有数据以及如何从中进行链接。< / p>

我现在拥有的是

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

和链接我使用while循环

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

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

2 个答案:

答案 0 :(得分:1)

改进bumperbox的答案并减少对服务器的查询。您可以使用IN语句:

,而不是进行多次查询
$query2 = "SELECT * FROM T1 WHERE ID in (" . explode(',', $row['T1ID']) . ")";
$res2 = mysql_query($query2) || die(mysql_error());

答案 1 :(得分:0)

因为您要在T1ID列中存储多个密钥,您需要查询数据,然后将其拆分为php中的单独密钥,然后执行第二个查询以获取所需的数据

有更好的方法来设计数据库,如果有可能那么我会看一个重新设计,但如果你坚持这个结构,那么你可以做以下

$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
   }
}