2016-04-28 26 views
1

から最大2枚の画像で取得する方法:MySQLの:私は2つのテーブルを持って、各クラス

(1)class (2)images

私は動的にすべての変数を設定し、クエリを実行したいです明日に出席しているクラスを検索し、そのクラスのメンバーのために欠けている2つの画像をアルファベット順に表示します。

基本的にこの2つのテーブル(クラスと画像)間のINNER JOINが仕事をするだろう

class_id   name 
4     Anna 
4     Bjorn 
8     Alex 
8     Ceri 
13    Adam 
13    Donna 
+0

現在の出力は何ですか? –

+0

関連テーブルの 'create table code'を共有してください。また、あなたの現在の出力 – 1000111

+0

申し訳ありませんが、現在の出力は動作しません - それはより仮想です! – huey

答えて

1

::私は私のような何かを与えることを望んでいるだろう

SET @class = (
    SELECT 
     id 
    FROM 
     class 
    WHERE 
     attending > CURDATE() 
    AND attending < CURDATE() + INTERVAL 2 DAY 
); 

SELECT 
    class_id, 
    NAME 
FROM 
    images 
WHERE 
    class_id = @class 
AND image_path IS NULL 
ORDER BY 
    NAME ASC 
LIMIT 2; 

SELECT 
images.class_id, 
images.NAME 
FROM class 
INNER JOIN images ON class.id = images.class_id 
WHERE class.attending > CURDATE() AND class.attending < CURDATE() + INTERVAL 2 DAY 
AND images.image_path IS NULL 
ORDER BY images.NAME 
LIMIT 2; 
このような何か

編集:

SELECT 
t.class_id, 
t.name 
FROM 
(
    SELECT 
     images.class_id, 
     images.NAME, 
     IF(@prevClassId = images.class_id, @classPosition := @classPosition + 1 , @classPosition := 0) rank, 
     @prevClassId := images.class_id 
    FROM (SELECT @prevClassId := NULL, @classPosition := 0) vars,class 
    INNER JOIN images ON class.id = images.class_id 
    WHERE class.attending > CURDATE() AND class.attending < CURDATE() + INTERVAL 2 DAY 
    AND images.image_path IS NULL 
    ORDER BY images.class_id 
) t 
WHERE t.rank < 2; 

SQL FIDDLE DEMO

サンプルデータ(クラス表):

id class_name attending 

1 one   4/29/2016 
4 Four  4/29/2016 
8 Eight  4/29/2016 
13 Thirteen 4/29/2016 

サンプルデータ(画像表):

id class_id name  image_path 
1  1  IMG_ONE IMAGE ONE PATH 
2  4  Anna  (NULL) 
3  4  Bjorn  (NULL) 
4  4  C4  (NULL) 
5  8  Alex  (NULL) 
6  8  Ceri  (NULL) 

出力:

class_id NAME 
4   Bjorn 
4   Anna 
8   Ceri 
8   Alex 
+0

これはちょうど私に2行を与える_overall_ - 明日出席する_each_クラスのために(最大)2行が必要です。 「制限」は、何らかのループが順調であると仮定した理由です。 – huey

+0

これは、各クラスに対して、このような行を最大で2つ必要とすることを意味しますか? – 1000111

+0

そして、これら2つのテーブルの 'create table code'を共有してください。 – 1000111

関連する問題