在JOIN语句中的MySQL AS

时间:2013-10-02 19:55:12

标签: mysql sql optimization query-optimization

我有一个包含帖子的表(edu_posts)。字段“post_receiver”通常包含user_id,但有时它可能包含事件ID(语法:event-ID),我创建了一个这样的语句:

  SELECT 
    p.*, 
    u.firstname AS post_author_firstname, 
    u.lastname AS post_author_lastname, 
    u3.firstname AS receiver_firstname, 
    u3.lastname AS receiver_lastname, 
    pl.like_author AS user_likes,
    CASE
    WHEN p.post_receiver REGEXP '^[a-z]'
    THEN
    SUBSTRING_INDEX(
      SUBSTRING_INDEX(p.post_receiver, '-', 2), 
      '-', 
      - 1
    )
    END
    AS event_id,
    e.event_name AS event_name
  FROM 
    edu_posts p 
    LEFT JOIN edu_users u ON u.user_id = p.post_author 
    LEFT JOIN edu_users u3 ON u3.user_id = p.post_receiver 
    LEFT JOIN edu_likes pl ON pl.like_entity = p.post_id
    LEFT JOIN edu_events e ON e.event_id = event_id

    AND pl.like_author = 1 
  GROUP BY 
    p.post_id, 
    pl.like_id 
  ORDER BY 
    p.post_date DESC

在SELECT语句中查看CASE及以下内容,以及最后一次LEFT JOIN。

我想我无法从我在SELECT语句中创建的“event_id”中检索数据。那么我可以根据EVENT_ID的值来做LEFT JOIN呢?

如果post_receiver等于:event-someID?

,也许整个过程太复杂了,而在PHP代码中进行新的MySQL调用会更好更有效。

你有什么想法?提前谢谢!

0 个答案:

没有答案