【问题标题】:MySQL INNER JOIN. Pull data from one table with data from anotherMySQL 内部连接。从一个表中提取数据和另一个表中的数据
【发布时间】:2012-01-12 21:32:08
【问题描述】:

我刚刚开始学习如何正确地进行 INNER JOINS,我想不出最好/最简单的方法。

我正在构建一个 url 缩短器,并且我正在尝试构建一个查询,该查询将使所有 long_url.destination 都匹配一个 slug“测试”。一个 slug 可能指向多个 long_url.destination(URL 改组、GEO 匹配等)。所以我需要 slug 让所有 long_url.destination 具有相同的 short_url.slug。

在我运行另一个查询以从 slug 中获取 short_id 之前,然后运行另一个查询以选择 long_url 中具有匹配 short_id 的所有行。

我认为如果我使用内部连接可能会更快,但我不确定如何正确设置它。

我想获取 long_url 表中的所有目标列,而 short_url 中只有 slug 数据,而无需运行单独的查询来从 slug 中获取 short_id。

Table: short_url
Columns: short_id | slug | enabled | timestamp
example:     1      test     1        1323343922

Table: long_url
Columns: long_id | short_id | destination          | geo | enabled |    timestamp
example:    1         1      http://www.test.com      US        1       132334922
example:    2         1      http://www.test.co.uk    UK        1       132334922

到目前为止我得到了这个:

SELECT destination, geo FROM long_url INNER JOIN short_url 
ON long_url.short_id = short_url.short_id WHERE enabled = 1;

function get_long_urls($slug) {

  $query = "SELECT....";
  $stmt = $db->prepare($query);
  $stmt->execute(array(':slug' => $slug));
  $results = $stmt->fetchAll(PDO::FETCH_ASSOC);

  return (array) $results:

}

example $results = array(
                        'http://www.test.com' => 'US',
                        'http://www.test.co.uk' => 'UK',
                         );

感谢您的帮助。

【问题讨论】:

  • 您的查询对我来说看起来不错。你到底有什么问题?
  • 我必须在查询中添加 WHERE slug = :slug。否则,我只是看看是否有更有效/更快的方法来做到这一点。到目前为止,这工作正常,我只是想看看我是否使用了正确的 JOIN。

标签: php mysql sql inner-join


【解决方案1】:
选择目的地,地理 FROM long_url LEFT JOIN short_url ON (long_url.short_id = short_url.short_id) 启用位置 = 1

【讨论】:

    【解决方案2】:
    select long_url.destination
         , long_url.geo
      from long_url
    inner
      join short_url
        on long_url.short_id = short_url.short_id
     where short_url.slug = :slug
       and long_url.enabled = 1
    

    您不需要像我那样限定所有列名,因为在这个特定查询中没有任何歧义。我真正做的只是添加一个绑定参数占位符。

    【讨论】:

      猜你喜欢
      • 2017-10-29
      • 2018-03-27
      • 1970-01-01
      • 1970-01-01
      • 2016-09-28
      • 2020-09-28
      • 1970-01-01
      • 2015-07-02
      • 1970-01-01
      相关资源
      最近更新 更多