【发布时间】:2018-07-07 19:26:36
【问题描述】:
哪种方法更好:
- 从
PHP发送复杂的选择查询,或者; - 在
MySQL中创建它的视图、函数和存储过程和 而是请求他们?
例如,我有这些表:
- 语言(ID、代码、名称);
- 国家(ID、代码、名称);
- 区域(id、ctry_id、代码、名称);
- 城市(id、rgn_id、代码、名称);
- 公司(id、cty_id、增值税、电话、电子邮件、网址);
- cnt_lng (id, ctry_id, lng_id, translate_name);
- rgn_lng (id, rgn_id, lng_id, translate_name);
- cty_lng (id, cty_id, lng_id, translate_name);
- 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之类的东西。