2017-01-16 55 views
0

我需要一個幫助。我需要使用PHP和Mysql按照列值過濾表中的值。我在下面解釋我的表格和代碼。如何使用PHP和MySQL從列表中獲取表中的數據

db_images:

image_id  member_id  subcat_id from_day to_day 

    1   220   56   1   3 

    2   220   56   1   3 


    3   220   56   1   1 

    4   120    22   1   5 

    5   120    22   2   4 

我下面解釋我的查詢。

$qry=mysqli_query($connect,"select * from db_iamges group by member_id,subcat_id order by image_id desc"); 

使用我的查詢我得到一個像下面的記錄。

image_id  member_id  subcat_id from_day to_day 

    3   220    56   1   1 

在這裏,我需要to_day應該永遠是更高的價值。如果存在相同的member_id and subcat_id,則to_day將始終爲較高值,from_day將始終爲較小值。預期產出應如下所示。

image_id  member_id  subcat_id from_day to_day 

    1   220    56   1  3 

    4   120    22   1  5 

請幫我解決這個問題。

+0

嘗試增加'WHERE from_day

+0

如果我最後的記錄會起作用嗎? – satya

+0

這將確保'from_day'小於'to_day'。 –

回答

0
Select 
    T.* 
From db_images t 
Inner join (
    Select member_id, subcat_id, max(to_day) to_day 
    db_images group by member_id,subcat_id 
) t2 on t.member_id = t2.member_id 
And t.Subcat_id = t2.subcat_id 
And t.to_day = t2.to_day; 
+0

請格式化。 – satya

0

使用max(列名)來獲得更高的值。

select image_id, member_id,subcat_id,from_day, max(to_day) as to_day from from db_iamges group by member_id,subcat_id order by image_id desc 
1

看起來你有語法問題,因爲如果你複製粘貼,你把「db_iamges」。我做了一個表格:

mysql> select * from prueba1; 
+----------+-----------+-----------+----------+--------+ 
| image_id | member_id | subcat_id | from_day | to_day | 
+----------+-----------+-----------+----------+--------+ 
|  1 |  220 |  56 |  1 |  3 | 
|  2 |  220 |  56 |  1 |  3 | 
|  3 |  220 |  56 |  1 |  1 | 
|  4 |  120 |  22 |  1 |  5 | 
|  5 |  120 |  22 |  2 |  4 | 
|  6 |  120 |  22 |  2 |  9 | 
|  7 |  120 |  22 |  2 |  2 | 
+----------+-----------+-----------+----------+--------+ 
7 rows in set (0.00 sec) 

和:

mysql> select image_id, member_id, subcat_id, min(from_day), max(to_day) from prueba1 group by member_id, subcat_id order by image_id asc; 
+----------+-----------+-----------+----------+-------------+ 
| image_id | member_id | subcat_id | from_day | max(to_day) | 
+----------+-----------+-----------+----------+-------------+ 
|  1 |  220 |  56 |  1 |   3 | 
|  4 |  120 |  22 |  1 |   9 | 
+----------+-----------+-----------+----------+-------------+ 
2 rows in set (0.00 sec) 

據工作

編輯:更新,因爲我不明白你的主要問題。

+0

如在Satya的輸出中顯示的那樣,有小的變化---從member2的test2組中選擇image_id,member_id,subcat_id,min(from_day),max(to_day),sub_id_id order by image_id asc;只需要將image_id desc更改爲asc即可。 – ManuSharma

+0

我正在使用他的例子,但你說得對,我會改變答案。謝謝 –

+0

@MarioV:我照你所做的還沒有工作。 – satya

0

試試這個

select t1.* from db_images t1 inner join(select max(member_id) as 
mid,max(subcat_id) as cid,min(from_day) as fdy from db_images group 
by member_id) t2 on t1.member_id = t2.mid and t2.cid = t1.subcat_id 
and t2.fdy = t1.from_day group by member_id order by image_id asc; 

check here

相關問題