1

私は 2 つの MySQL テーブルを持っています。そのうちの 1 つには、アイテムを表示する必要がある順序を整理するための数値列があります。

item_names

menu_id  |  dish_id  |  section_id  |  item_name
--------------------------------------------------
1        | 23        |      2       |   Pie       
1        | 24        |      2       |  Fish       
1        | 25        |      3       |  Apples     
1        | 26        |      2       |  Onions     
1        | 27        |      2       |  Chips

link_extras

extra_id |  dish_id  | sort  
-----------------------------
1        | 23        | 2     
2        | 23        | 2     
3        | 23        | 2      
1        | 24        | 0     
5        | 24        | 0     
6        | 26        | 3     
12       | 26        | 3     
1        | 27        | 1  
1        | 25        | 0    

基本的に私がやろうとしているのは、テーブルから特定のmenu_idandを使用して各料理を抽出し、テーブルの列に関して出力を注文することです。section_iditem_namessortlink_extras

これまでのところ:

$query="SELECT a.item_name, a.dish_id, b.sort
    FROM item_names AS a, link_extras AS b 
       WHERE a.menu_id='1'
           AND a.section_id='2'
           AND b.dish_id=a.dish_id
       GROUP BY b.dish_id
       ORDER BY b.sort";

私はデータベースにまったく慣れていないので、助けていただければ幸いです。私が求めている結果は

Fish
Chips
Pie
Onions

残念ながら、正しい順序を取得できません。

4

2 に答える 2

2

シンプルなものを使用する必要がありますJOIN

SELECT a.item_name, a.dish_id, b.sort
    FROM item_names AS a 
    JOIN link_extras AS b 
      ON a.dish_id = b.dish_id
   WHERE menu_id = 1
    AND section_id = 2
       GROUP BY b.dish_id
ORDER BY b.sort

出力:

| ITEM_NAME | DISH_ID | SORT |
------------------------------
|      Fish |      24 |    0 |
|     Chips |      27 |    1 |
|       Pie |      23 |    2 |
|    Onions |      26 |    3 |

このSQLFiddleを参照してください

于 2013-04-26T07:56:24.713 に答える
1
SELECT
  in.item_name
FROM item_names AS in
  LEFT JOIN link_extras AS le
    ON le.dish_id = in.dish_id
WHERE in.menu_id = 1
    AND in.section_id = 2
ORDER BY le.sort

デモはこちら

出力

| ITEM_NAME |
-------------
|      Fish |
|     Chips |
|       Pie |
|    Onions |
于 2013-04-26T07:56:25.807 に答える