【问题标题】:PHP & MySQL: complex queriesPHP & MySQL:复杂查询
【发布时间】:2018-07-07 19:26:36
【问题描述】:

哪种方法更好:

  1. PHP 发送复杂的选择查询,或者;
  2. MySQL中创建它的视图、函数和存储过程和 而是请求他们?

例如,我有这些表:

  1. 语言(ID、代码、名称);
  2. 国家(ID、代码、名称);
  3. 区域(id、ctry_id、代码、名称);
  4. 城市(id、rgn_id、代码、名称);
  5. 公司(id、cty_id、增值税、电话、电子邮件、网址);
  6. cnt_lng (id, ctry_id, lng_id, translate_name);
  7. rgn_lng (id, rgn_id, lng_id, translate_name);
  8. cty_lng (id, cty_id, lng_id, translate_name);
  9. cmp_lng(id、cmp_id、lng_id、名称、信息)。

我想选择这些信息:

国家、地区、城市和公司详细信息(按定义的语言),例如en.

这是我的查询:

SELECT
  ctry_lng.translated_name,
  rgn_lng.translated_name,
  cty_lng.translated_name,
  cmp.phone,
  cmp.email,
  cmp.url,
  cmp_lng.name,
  cmp_lng.info
FROM
  language AS lng,
  country AS ctry,
  region AS rgn,
  city AS cty,
  company AS, cmp,
  cmp_lng,
  ctry_lng,
  rgn_lng,
  cty_lng
WHERE lng.code = "en"
AND ctry_lng.lng_id = lng.id
AND ctry_lng.ctry_id = ctry.id
AND rgn.ctry_id = ctry.id
AND rgn_lng.rgn_id = rgn.id
AND rgn_lng.lng_id = lng.id
AND cty.rgn_id = rgn.id
AND cty_lng.cty_id = cty.id
AND cty_lng.lng_id = lng.id
AND cmp.cty_id = cty.id
AND cmp_lng.cmp_id = cmp.id
AND cmp_lng.lng_id = lng.id
ORDER BY cmp_lng.name ASC;

上面的查询是我要从PHP发送到 MySQL。或者我应该创建一个视图、一个函数还是一个存储过程 然后将查询从PHP 发送到MySQL 它的名字。

还是谢谢!

【问题讨论】:

  • @Jens:好的,你能举个例子吗?
  • @Jens:这不是关于:WHERE 操作员或JOIN,请再次阅读问题。
  • 这个查询不是特别复杂,只是连接了几个表并应用了一个过滤器。至于哪种方法更好?这是相当主观的。如果查询确实很复杂,那么视图可能会为您节省一些时间,因为它是在您创建时编译的。视图也可用于访问控制。但这取决于你自己的决定。
  • @Shadow:非常感谢!我很感激。
  • 关于@Jens 的评论:不要使用FROM table1, table2 WHERE table1.id = table2.id,而是使用FROM table1 INNER JOIN table2 ON table1.id = table2.id 之类的东西。

标签: php mysql


【解决方案1】:

查询的性质似乎并不复杂。存储过程和视图与优化此查询无关,您可以阅读有关它们的更多信息in this answer

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-31
    • 2012-11-17
    相关资源
    最近更新 更多