MySQL AS-in-JOIN语句

MySQL AS-in-JOIN语句,mysql,sql,optimization,query-optimization,Mysql,Sql,Optimization,Query Optimization,我有一个表(edu_posts),其中包含posts。“post_receiver”字段通常包含用户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 A

我有一个表(edu_posts),其中包含posts。“post_receiver”字段通常包含用户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语句中的大小写以及最后一个左连接

我想我无法从SELECT语句中创建的“event_id”中检索数据。那么,基于EVENT_ID的值,我可以做些什么来左连接呢

也许整个过程太复杂了,如果post_receiver等于:event someID,那么在PHP代码中进行新的MySQL调用会更好更有效


你的想法是什么?提前谢谢

您可能希望发布一些示例数据和相应的预期结果,因为您的任务不清楚。
LEFT JOIN。。。当p.post_receiver REGEXP'^[a-z]'然后SUBSTRING_INDEX(SUBSTRING_INDEX(p.post_receiver'-',2),'-',1)END=123
ON
子句接受任何表达式,而不仅仅是在
col=col2
格式中。我的想法是,您不应该在一个字段中存储两种不同类型的数据。这就是为什么这很复杂。您应该有两个字段,一个用于UserID,一个用于EventID。您可以强制执行Exactl1字段一次不为空。谢谢Zerkms。我使用了这段代码:
在e.event\u id=CASE上,当p.post\u receiver REGEXP'^[a-z]'然后是SUBSTRING\u INDEX(SUBSTRING\u INDEX(p.post\u receiver'-',2),'-',1),否则“x”结束
现在出现了奇怪的问题;只有一个事件填写了“事件名称”-rest为空。我已经尝试将行“event-8”更改为fx“event-6”,它将改变。@BillGregg,什么是最聪明的?是否在循环中有一个带有事件\ id的额外字段,或在循环中进行额外查询以获取事件名称?我在考虑有效性和优化。