Make my MySQL query less verbose -
the following query real challenge me build wordpress site using wordpress wp_post table , wp_postmeta table , wp_user table. works contains lot of repeated statements. not sure how simplify (or if can be). tips simplifying , ridding repetition appreciated.
the tables contain data this:
wp_posts id | post_author | post_parent | post_type | post_title | post_date 2258 163 0 fep_message 2262 1 2258 fep_message re:a 2264 163 2258 fep_message re:a 1698 1 0 fep_message b 1692 1 0 fep_message c wp_postmeta meta_id | post_id | meta_key | meta_value 14696 2258 _fep_participants 1 14697 2258 _fep_participants 163 9819 1698 _fep_participants 163 9820 1698 _fep_participants 1 9759 1692 _fep_participants 163 9760 1692 _fep_participants 1 9815 1692 _fep_delete_by_1 1499496054 13751 1698 _fep_delete_by_163 1501044119 wp_user id | user_login 1 myname 163 theirname
this query
select a.* ( select p.id, p.post_date, p.post_title, uf.user_login from_login, ut.user_login to_login wp_posts p join wp_postmeta pm_to on (p.id = pm_to.post_id , pm_to.meta_key = '_fep_participants' , p.post_parent = 0 , pm_to.meta_value <> p.post_author) join wp_postmeta pm_delete on (p.id = pm_delete.post_id) left join wp_users uf on uf.id = p.post_author left join wp_users ut on ut.id = pm_to.meta_value (p.post_type = 'fep_message' , pm_delete.meta_value <> '_fep_delete_by_1' , uf.user_login = 'myname' or p.post_type = 'fep_message' , pm_delete.meta_value <> '_fep_delete_by_1' , ut.user_login = 'myname') , p.post_date >= '2017-07-07 00:00:00' , p.post_date <= '2017-08-12 23:59:59' order p.post_date ) union select b.* ( select p.id, p.post_date, p.post_title, uf.user_login from_login, ut.user_login to_login wp_posts p join wp_postmeta pm_to on (p.post_parent = pm_to.post_id , p.post_parent <> 0 , pm_to.meta_key = '_fep_participants' , pm_to.meta_value <> p.post_author) join wp_postmeta pm_delete on (p.id = pm_delete.post_id) left join wp_users uf on uf.id = p.post_author left join wp_users ut on ut.id = pm_to.meta_value (p.post_type = 'fep_message' , pm_delete.meta_value <> '_fep_delete_by_1' , uf.user_login = 'myname' or p.post_type = 'fep_message' , pm_delete.meta_value <> '_fep_delete_by_1' , ut.user_login = 'myname') , p.post_date >= '2017-07-07 00:00:00' , p.post_date <= '2017-08-12 23:59:59' order p.post_date ) b
the result produces is:
id |post_date |post_title |from_login |to_login 1692 2017-07-07 11:45:03 c myname theirname 1698 2017-07-08 16:28:18 b myname theirname 2258 2017-08-11 23:15:10 theirname myname 2262 2017-08-12 16:48:05 re:a myname theirname
thank solaflare. did it. simplification:
select p.id, p.post_date, p.post_title, uf.user_login from_login, ut.user_login to_login wp_posts p join wp_postmeta pm_to on ((p.id = pm_to.post_id , p.post_parent = 0) or (p.post_parent = pm_to.post_id , p.post_parent <> 0)) , pm_to.meta_key = '_fep_participants' , pm_to.meta_value <> p.post_author) join wp_postmeta pm_delete on (p.id = pm_delete.post_id) left join wp_users uf on uf.id = p.post_author left join wp_users ut on ut.id = pm_to.meta_value (p.post_type = 'fep_message' , pm_delete.meta_value <> '_fep_delete_by_1' , uf.user_login = 'myname' or p.post_type = 'fep_message' , pm_delete.meta_value <> '_fep_delete_by_1' , ut.user_login = 'myname') , p.post_date >= '2017-07-07 00:00:00' , p.post_date <= '2017-08-12 23:59:59' order p.post_date
Comments
Post a Comment