我有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的数据?或者我必须做这样的循环吗?
编辑:我希望这不是一个问题太混乱。我的言语不是很好,这就是我喜欢编程的原因。 :)
答案 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