select a.photo_path as a_path,b.photo_path as b_path,c.photo_path as b_path from user_photo a,user_photo b,user_photo c
where a.userid='$a' and b.userid='$b' and c.userid='$c' order by rand() limit 1
但这样效率可能会很差,因为后面的Order By Rand()和前面的多表连接
可能改成这样:
select a.photo_path as a_path,b.photo_path as b_path,c.photo_path as c_path from (select * from user_photo where userid='$a') as a join (select * from user_photo where userid='$b') as b join (select * from user_photo where userid='$c') as c order by rand() limit 1
如果您查询十次一条数据。通常是要建立十次连接。
如果您查询一次十条数据。
那么只要建立一次连接。
建立连接需要经过一些步骤,实例若干object。
这个差距是显而易见的。
我做过类似的查询,就是用字典项表的数据id列,与数据表的字符串列做instr比较,比较时,两个数据分别在前后加',',防止第一个和最后一个字典项无法查找出来。
举个例子,数据表
字典表 dict
idname
12wifi
13冰箱
14洗衣机
15电视
业务表 query_table
idquery_str
1 12,13,14,15
2 12,14
3 14,15
SELECT *
FROM dict a,query_table b
WHERE INSTR(CONCAT(CONCAT(',',b.query_str),','), CONCAT(',', CONCAT(a.id,',')))>-0 AND b.id=1
看实际效果
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)