|
简而言之,我想按照登录后Flickr主页上显示的内容来完成某些工作。它显示了每个朋友的三张最新照片,这些照片按日期排序,但按朋友分组。: j' J' L( y h" q7 t
这里有一个更长的解释:例如,我有3个朋友:John,George和Andrea。我要提取的列表应如下所示:
2 K) L0 b8 R' ]. p' }7 _9 kGeorge/ ]6 Q: S& i( J" z
Photo - 2010-05-18
* A h( P7 G9 e6 N& r. f1 R3 E% xPhoto - 2010-05-185 A# ^# P5 q" t
Photo - 2010-05-126 F" x$ @: P7 C" ^! j' T @
7 Q9 d/ O b7 Z4 a3 r9 e
John
0 K( d o. E7 u3 DPhoto - 2010-05-171 x( K% \# @2 z
Photo - 2010-05-14. G9 ]- }7 s0 _( O- `" S/ O7 _
0 `3 M" T. \8 o3 Q. X2 gPhoto - 2010-05-12
; x% H0 V+ M( U* nAndrea
2 A4 \, V2 S1 S) _4 I
?4 | h/ j1 C* H! ]) WPhoto - 2010-05-154 A n: d5 d7 Y: ^
Photo - 2010-05-15
0 M! m( z& R3 x* I8 ~( i7 [Photo - 2010-05-15
, W& y/ w, Z- ~6 M- t. h7 j上传最新照片的朋友位于最上方,但其后的两个文件紧随其后。& f- n( M/ _1 K' C6 }
! }% o$ C& @( O7 E
我想从MySQL进行此操作,目前我到达了这里:
: S3 Q4 h$ ?$ n" hSELECT photos.user_id, photos.id, photos.date_uploaded
" a1 Y$ b1 A, L" D9 ?9 V! @& RFROM photos- u1 I. O# @' D' l h) w/ E( D# |
WHERE photos.user_id IN (SELECT user2_id5 i" P2 G: P) u8 A& e5 i
FROM user_relations
" D( Q5 d* v0 y, M0 s# X0 \ WHERE user1_id = 8)
$ e, N' S1 E, i6 u+ {8 UORDER BY date_uploaded DESC0 n- v; J( L3 N/ s, S
user1_id = 8当前登录的用户在哪里user2_id,朋友的ID在哪里。该查询确实返回ID =
& \: S1 a+ F- L0 x# _2 I5 g1 Q8的用户联系人按日期排序上传的最新文件。但是我想完成上面提到的分组和限制。
C+ q) g8 X( c# K0 F# ~6 V希望这是有道理的。先感谢您。& E, [3 T# [& C
3 u! V* B. T) p+ U0 q' [
解决方案:
, r5 D5 e0 a0 t4 _
( y, _7 i4 L) U4 }2 u" A* n$ l6 N7 M/ _/ j. J+ j
: s7 H8 t& K6 I: q# b: V3 Y' F2 o5 K 有时,达到目的的唯一方法是创建一段非常丑陋和令人发指的SQL,以至于执行多个查询的替代方法很有吸引力:-)& u1 X6 ~6 u$ F" Z) d
我只想查询一个朋友列表,然后为每个朋友获取三张最近的照片。就像是:
' f2 C2 x$ q* l0 {friend_list = sqlexec "select user2_id from relations where user1_id = "
' G7 p% n; M3 V E3 Y0 j9 J( K + current_user_id
+ L& u8 B* o. [, _6 P# I+ s6 Q9 w" e$ fphotolist = []
3 _& p ~, A* F3 J9 U& Ofor friend in friend_list:. @. R$ s; d) E, @9 v1 y, T
photolist += sqlexec "select user_id, id, date_uploaded from photos"* P7 U3 G9 u8 M/ x' y7 k
+ " where user_id = "
& U; f6 O1 l+ o4 l + friend.get("user2_id")
/ r3 E: d! V, M1 x6 l% q+ K + " order by date_uploaded desc fetch first 3 rows only"
- h3 I% t! w. T, A- e' O# Now do something with photolist8 E4 a8 N% E& d3 v: l3 a f% c
你不 具备 做它为一个查询任何比你只限于一个正则表达式匹配一个十恶不赦的模式。当然,成为“聪明人”会很好,但很少有必要。我更喜欢务实的方法。 |
|