sql会不断累积,总结,记录
总结1.
1.DISTINCT关键字,对单个字段去重如果说对单个字段排重,再根据另外一个排序的话,使用group up 分组在排序
2.查询某个字段的数量时,使用group up 分组 使用 count(1) 统计数量
1.mysql自带函数
INSTR(STR,SUBSTR) 在一个字符串(STR)中搜索指定的字符(SUBSTR),返回发现指定的字符的位置(INDEX);
2.为什么使用count(1)而不使用count(*)?
如果表只有一个字段,count()最快。
count(1)跟count(主键)一样,只扫描主键。count( *)跟count(非主键)一样,扫描整个表。明显前者更快一些。
若含有where语句,则会优先where中条件索引
2019-8-3
1.查询我浏览的用户
思路分析
1.通过子查询,先查询出当前用户看过的用户
2.然后对 用户id进行分组,并且查询出最大的时间
3.使用 order by 按照时间字段 进行排序
SELECT
X.user_id,
MAX(X.create_time) create_time
FROM
(SELECT
r.user_id,
r.create_time
FROM
book_member_read_log r,
book_contact_member m
WHERE m.`id` = r.`member_id`
AND m.`user_id` = #{condition.userId}
AND r.`user_id` != #{condition.userId}) X
GROUP BY X.user_id
ORDER BY X.create_time DESC
2.根据用户的产品id 查询其他用户是大腕并且产品id 相符合
思路分析
1.查询当前用户,单独取出并放入 list集合
2.mybatis 使用foreach 进行遍历
3.循环所有用户,在sql层判断 其他用户的某个字段 是否包含传入的字段 使用instr内置函数
INSTR(STR,SUBSTR) 在一个字符串(STR)中搜索指定的字符(SUBSTR),返回发现指定的字符的位置(INDEX);
.size在sql中还可以判断list的长度
SELECT DISTINCT
*
FROM
book_contact_member
WHERE
<if test="condition.goodsClassList != null and condition.goodsClassList.size != 0">
and
<foreach collection="condition.goodsClassList" index="index" item="item" open="(" separator="or" close=")">
INSTR( goods_class, #{item} ) > 0
</foreach>
</if>
AND user_id != #{condition.userId}
AND is_famous = 1
3.查询数据,-》 我的引荐-》通过我的userid 查询 我推荐过谁
思路分析
1.查询出我看过的所有人
2.排除 查看的是否是自己
返回结果memberId memberId是另外一张表的ID 所以两表关联查询
SELECT
r.member_id,
r.create_time
FROM
book_visit_card_recommand r,
book_visit_card c
WHERE r.member_id = c.member_id
AND c.user_id != #{condition.userId}
AND r.user_id = #{condition.userId}
GROUP BY r.member_id
order by r.id desc
4.联合查询 UNION , 两张表的 相通数据,关联之后, 按照时间排序
SELECT DISTINCT
x.*
FROM
(SELECT
*
FROM
book_contact
WHERE user_id = #{condition.userId}
AND contact_status = '0'
UNION
SELECT
c.*
FROM
book_contact c,
book_contact_member m
WHERE c.id = m.contact_id
AND m.user_id = #{condition.userId}) X
ORDER BY x.create_time DESC
- 联合查询 根据一个表中的 同一个字段的不同值,分别查出数据 合并 按照时间排序
SELECT
x.*
FROM
(SELECT
n.*
FROM
book_system_news n,
book_contact c
WHERE n.`contact_id` = c.`id`
AND c.`user_id` = 'e9322b305ebd45d98adc1643aeece2e8'
AND news_type IN ('checkContact', 'seachContact')
UNION
SELECT
n.*
FROM
book_system_news n,
book_contact_member m
WHERE n.`member_id` = m.`id`
AND m.`user_id` = 'e9322b305ebd45d98adc1643aeece2e8'
AND news_type IN ('userContact')) X
ORDER BY x.create_time DESC
6.数据库的字段 是 访问量 ,每次网页被访问 数量+1 ,自增长
<update id="updateOfferValue" parameterType="java.lang.String">
update book_contact_member
SET
offer_value = (offer_value + 1)
WHERE id = #{id}
</update>
//2020.5.23更新
7.根据记录表查询的数据记录基础表 主要学习 case用法
SELECT a.id,a.create_time,a.task_type,a.task_code,a.key_task,a.key_work,a.work_content,a.lead_depart_id,a.lead_depart,a.legal_duty_ids,a.legal_duty,a.current_stage,a.stage,b.task_status
FROM
dt_task_base a,
(
SELECT
t1.task_id,
case when t2.task_status IS NULL then 0 else 1 end as task_status
-- t2.task_status
FROM
( SELECT task_id FROM dt_task_record WHERE response_companyid = '8a81e781720cbb8901720cbd79610013' GROUP BY task_id ) t1
LEFT JOIN ( SELECT task_id, 1 task_status FROM dt_task_record WHERE issue_companyid = '8a81e781720cbb8901720cbd79610013' GROUP BY task_id ) t2 ON t1.task_id = t2.task_id
) b
WHERE
a.id = b.task_id and a.task_type ='1' limit 0, 20
//2020.5.28 多条件搜索
重点学习 多个对象like
Sql: select count(*) from dt_task_base where (key_task like '%sss%' or task_code like '%sss%' or lead_depart like '%sss%' or legal_duty like '%sss%' or key_work like '%sss%' or work_content like '%sss%') and task_type = ?