2

テーブルf_stockには、インベントリ内のすべてのアイテムのリストがあります。type列の整数はid表の を参照しますf_type

の代わりにtablef_stockの内容を出力したい。これはどのように行われますか?f_type.idf_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ために、 whileループf_type.id内にセカンダリ $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 関数の使用を避ける必要があります。PDOまたはMySQLiを使用する

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 の方が実際には優れてLEFT JOINいますINNER JOIN。その理由は、一致する行を持つ行INNER JOINのみが返されるためです。NULL の場合、または指定されたnoが存在する場合、行は返されません。すべての行を返し、可能であればそれらを行と一致させようとします。f_stockf_typef_stock.typef_typeidf_stockLEFT JOINf_stockf_type

于 2012-11-06T10:23:13.950 に答える
2

MySQL Join を使用できます

DB でこのクエリを使用します。

$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 に答える