【问题标题】:PHP MySQL LEFT JOIN not workingPHP MySQL LEFT JOIN 不起作用
【发布时间】:2015-12-05 15:40:18
【问题描述】:

我想知道是否有人可以帮助我解决这个问题。

Example Table ($tableTerms):
-----------------------------
| NAME        | SLUG        |
-----------------------------
| Dean        | dean        |
-----------------------------
| Football    | football    |
-----------------------------

我正在尝试从 $tableTerms 表中的“名称”列中获取一些数据。

在查询期间,我将列称为“slug”,以便查找“Dean”参加的正确“event_name”。然后在同一个查询中,我想调用列(“name”),但这次访问“Football”行,以便查看“Dean”参加的活动类型。

我使用的是 Wordpress 的术语和分类法,这就是为什么同一个表中有不同类型的数据。

我尝试使用 LEFT JOIN 来实现我的目标,但我没有运气。该查询在我添加 LEFT JOIN 和额外的 SELECT 之前有效,但我现在需要额外的数据。

任何人的帮助都会很棒,谢谢!

院长。

    // Look Up Events Attended
    $tableTerms = $wpdb->prefix . "terms";
    $tableTermTaxonomy = $wpdb->prefix . "term_taxonomy";
    $tableTermRelationships = $wpdb->prefix . "term_relationships";
    $tableEvents = $wpdb->prefix . "em_events";
    $tableEventLocations = $wpdb->prefix . "em_locations";
    $tableEventsMeta = $wpdb->prefix . "em_meta";

    $slug = strtolower($firstName)."-".strtolower($lastName);

    if(isset($memberID)) {  
        $eventsAttendedQuery = $wpdb->get_results("

        SELECT 
        event_name,
        event_start_date,
        location_name,
        tableTermsCategory.name

        FROM  
        $tableTerms,
        $tableTermTaxonomy,
        $tableTermRelationships,
        $tableEvents,
        $tableEventLocations

            LEFT JOIN
            $tableTerms AS tableTermsCategory
            ON tableTermsCategory.term_id = $tableTermTaxonomy.term_id AND
            $tableTermTaxonomy.taxonomy = 'event-categories' AND
            $tableTermTaxonomy.term_taxonomy_id = $tableTermRelationships.term_taxonomy_id AND
            $tableTermRelationships.object_id = $tableEvents.post_id


        WHERE 
        YEAR(event_start_date) = $year AND
        slug = '$slug' AND 
        $tableTerms.term_id = $tableTermTaxonomy.term_id AND
        $tableTermTaxonomy.taxonomy = 'event-tags' AND
        $tableTermRelationships.term_taxonomy_id = $tableTermTaxonomy.term_taxonomy_id AND
        $tableEvents.post_id = $tableTermRelationships.object_id AND
        $tableEvents.location_id = $tableEventLocations.location_id

        ORDER BY event_start_date ASC

        ");

    }

【问题讨论】:

  • 你为什么有from $tableterms ... left join $tableterms?你不应该混合这样的连接语法。选择一种风格并坚持下去。
  • 您的查询只是坏人,试图使用 from,bad...bad...bad 关联,究竟是什么错误?由mysql返回
  • 我同意@AlexandreCarvalhodeMelo 的查询真的很糟糕。使用 4 个内部连接 ​​FROM $tableTerms, $tableTermTaxonomy, $tableTermRelationships,$tableEvents,$tableEventLocations 且未设置 ON 字段似乎您不知道您的数据库架构并要求 mysql 服务器猜测它是什么。

标签: php mysql wordpress web left-join


【解决方案1】:

查看您的查询,发现JOINS 完全是奇怪的。如下修改您的查询

    SELECT 
    event_name,
    event_start_date,
    location_name,
    tableTermsCategory.name

    FROM  
    $tableTerms LEFT JOIN $tableTermTaxonomy ON $tableTerms.term_id = $tableTermTaxonomy.term_id
    AND $tableTermTaxonomy.taxonomy IN ('event-categories', 'event-tags') 
    AND $tableTermTaxonomy.term_taxonomy_id = $tableTermRelationships.term_taxonomy_id
    LEFT JOIN $tableTermRelationships ON $tableTermRelationships.term_taxonomy_id = $tableTermTaxonomy.term_taxonomy_id
    LEFT JOIN $tableEvents ON $tableEvents.post_id = $tableTermRelationships.object_id
    LEFT JOIN $tableEventLocations ON $tableEvents.location_id = $tableEventLocations.location_id

    WHERE 
    YEAR(event_start_date) = $year AND
    slug = '$slug'
    ORDER BY event_start_date;

【讨论】:

    猜你喜欢
    • 2016-12-09
    • 1970-01-01
    • 2018-11-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-29
    • 1970-01-01
    相关资源
    最近更新 更多