2017-01-16 98 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

相关问题