在单个MySQL查询中查找另一个表中的一列值

时间:2012-11-06 10:16:48

标签: php mysql

在表格f_stock中,我列出了广告资源中的所有项目。 type列中的整数表示表id中的f_type

我想用f_stock代替f_type.id输出表f_stock.type的内容。这是怎么做到的?

过去我在这些方面做了一些事情:

$query = "SELECT * FROM `f_stock`";
$result = mysql_query ($query) or die (mysql_error ());
while ($row = mysql_fetch_array ($result, MYSQL_ASSOC)) {
    $data[] = $row;
}
print_r ($data);

要在f_stock.type列中查找整数f_type.id,我在 while 循环中创建了一个辅助$ query / $结果。

f_stock

`type` | `size` | `length`
-------|--------|---------
   1   |   3    |    12
   1   |   3    |    16   
   2   |   3    |    20   
   2   |   3    |    25   
   1   |   4    |    12   
   1   |   4    |    16   
   3   |   4    |    20   

f_type

 `id` |  `type` 
------|---------
   1  | 'Type 1'
   2  | 'Type 2'
   3  | 'Type 3'
   4  | 'Type 4'
   5  | 'Type 5'
   6  | 'Type 6'
   7  | 'Type 7'

3 个答案:

答案 0 :(得分:3)

首先,您应该避免使用mysql php函数。使用PDOMySQLi

您只需使用LEFT JOIN语句就可以解决您的问题,如下所示

SELECT `f_stock`.`size`, `f_stock`.`length`, `f_type`.`type`
FROM `f_stock` 
LEFT JOIN `f_type` on `f_type`.`id`=`f_stock`.`type`;

答案 1 :(得分:3)

您要找的是JOIN

SELECT `f_stock`.`size`, `f_stock`.`length`, `f_type`.`type`
FROM `f_stock`
LEFT JOIN `f_type` ON `f_type`.`id` = `f_stock`.`type`

CNC中
@Bruno Vieira实际上更好,你应该使用LEFT JOIN而不是INNER JOIN。原因是INNER JOIN仅返回具有匹配f_stock行的f_type行。如果f_stock.type为NULL,或者如果不存在具有给定f_type的{​​{1}},则不会返回id行。 f_stock会返回所有LEFT JOIN行,如果可能,会尝试将其与f_stock行匹配。

答案 2 :(得分:2)

您可以使用MySQL联接

在您的数据库中使用此查询。

$query = "SELECT * FROM `f_stock`, `f_type` WHERE `f_stock`.`type` = `f_type`.`id`";

MySQL代码:

SELECT `f_stock`.`type` as `type`, `size`, `length` FROM `f_stock`, `f_type`
  WHERE `f_stock`.`type` = `f_type`.`id`

小提琴:http://sqlfiddle.com/#!2/58892/2

输出:

+------+------+--------+
| TYPE | SIZE | LENGTH |
+------+------+--------+
|    1 |    3 |     12 |
|    1 |    3 |     16 |
|    1 |    4 |     12 |
|    1 |    4 |     16 |
|    2 |    3 |     20 |
|    2 |    3 |     25 |
|    3 |    4 |     20 |
+------+------+--------+