有一个数据结果A,大致是这样的
id v_id user_id change
1  1    1234    1
2  1    1234    2
3  2    1234    1
4  2    3456    2
5  3    6789    1
6  3    6789    2
(其中id是虚拟的,方便描述问题,且这个结果集是order by“时间”之后的结果,不能轻易变动。)我的目的,根据v_id,得到与1234用户有关的所有记录,大致如下
1 1     1234    1
1 1     1234    2
2 2     1234    1
2 2     3456    2如果只是用简单的where条件中带user_id=1234,就会丢掉最后一条记录。所以没办法,我只能做存储过程。(其实这也是我第一个问题,能否用其它方法实现,让我一次即得到所需要的结果?)。存储过程我就不多说了,无非是用IN加游标来实现而已。
但又会遇到另一个问题,比如根据v_id,得到与3456用户有关的所有记录,想得到如下结果
1 2     1234    1
2 2     3456    2
但实际用游标遍历结果A时,当发现第3条记录user_id等于1234时,我会认为user_id不符合而跳过,但读取第4条记录,发现user_id等于3456,就知道这是我要的,且知道v_id为2,我就必须向后遍历游标,把以前读过的,再重新遍历回来,可是偏偏MySQL游标不支持,晕死。现在卡在这个地方了,各位帮忙看下。

解决方案 »

  1.   

    首先根据user_id(1234),找到对应的v_id。如果是同样的v_id,则一定是1234的记录信息,然后一条一条遍历下去。所以结果A的记录,对于1234,会查到4条。
      

  2.   

    select * from 有一个数据结果A where v_id in (select v_id from 有一个数据结果A where user_id=1234)
      

  3.   

    SELECT a.* 
    FROM `tablename` a 
    INNER JOIN (SELECT DISTINCT v_id 
    FROM `tablename` WHERE user_id='1234') tmp 
    ON a.v_id=tmp.v_id;
    这样行么?