2

在表中f_stock,我有一个清单中所有项目的列表。列中的整数type是指id表中的f_type

我想f_stockf_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/$result。

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'
4

3 回答 3

3

首先,您应该避免使用mysqlphp 函数。使用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`;
于 2012-11-06T10:22:59.810 回答
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`

-edit- @Bruno
Vieira 实际上更好,您应该使用 aLEFT JOIN而不是INNER JOIN. 原因是 anINNER JOIN仅返回f_stock具有匹配行的f_type行。如果f_stock.type为 NULL,或者如果f_type给定的不id存在,f_stock则不会返回该行。LEFT JOIN返回所有f_stock行,然后f_type在可能的情况下尝试将它们与一行匹配。

于 2012-11-06T10:23:13.950 回答
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 |
+------+------+--------+
于 2012-11-06T10:19:26.857 回答