选择一个DISTINCT ID,然后从另一个表中提取数据

时间:2012-09-20 00:01:14

标签: mysql logic

我有2个MySQL表,一个用于部件,一个用于多年。我无法弄清楚如何在stackoverflow上创建一个表..继续制作标题所以这是我尝试解释我需要的弱点。

表1

id | part_id | years
====================
 0 |    15   | 1945
 1 |    15   | 1946
 2 |    16   | 1944
 3 |    16   | 1947
 4 |    16   | 1948
 5 |    17   | 1953

正如您可能已经猜到的那样,part_id是零件表中零件的ID号。现在,我知道我有这个根据年份推出一个独特的部分ID。那部分很容易。

SELECT DISTINCT part_id FROM `years` WHERE year BETWEEN 1945 AND 1949 

这只是一个例子,但这与我想要的完全一样。给我

15和16.只有一次。哪个好。

现在,我是否需要在php中执行循环以获取部件中的信息?我不知道如何在这里加入。

<?php
foreach($item_pulled_from_db as $newid) {
    $query = "SELECT * FROM 'parts' WHERE id = $newid";
} // I know there's more stuff to do in here, just a basic overview for you to look at
?>

我应该做上面的代码吗?有没有办法选择DISTINCT part_id然后从MySQL的另一个表中提取该ID的数据?或者我必须做这样的循环吗?

编辑:我希望这不是一个问题太混乱。我的言语不是很好,这就是我喜欢编程的原因。 :)

3 个答案:

答案 0 :(得分:1)

使用联接:

SELECT parts.*
FROM parts
JOIN (SELECT DISTINCT part_id
      FROM years
      WHERE year BETWEEN 1945 AND 1949) years
ON parts.id = years.part_id

答案 1 :(得分:0)

您可以在单个查询中使用JOIN将其关闭。尝试:

SELECT `parts`.* FROM `parts`
INNER JOIN `years` ON `years`.`part_id` = `parts`.`id`
WHERE `years`.`year` BETWEEN 1945 AND 1949

从PHP执行该单个查询,然后获取结果集。它应该与您使用多个查询获得的内容相同。

答案 2 :(得分:0)

此查询为您提供所需的结果:

SELECT DISTINCT
    p.*
FROM 
    years y
INNER JOIN
    parts p ON p.id = y.part_id
WHERE 
    y.year BETWEEN 1945 AND 1949