Php 获取期间生成链接vs创建期间生成链接

Php 获取期间生成链接vs创建期间生成链接,php,mysql,Php,Mysql,假设我有一张这样的桌子: 类别: | cat_id | cat_name | |--------|----------| | 1 | tvs | | 2 | phones | | 3 | tablets | | product_id | product_name | product_category | |------------|-----------------|------------------| | 1 | tv

假设我有一张这样的桌子:

类别:

| cat_id | cat_name |
|--------|----------|
| 1      | tvs      |
| 2      | phones   |
| 3      | tablets  |
| product_id | product_name    | product_category |
|------------|-----------------|------------------|
| 1          | tv sony         | 1                |
| 2          | tv samsung      | 1                |
| 3          | phone htc       | 2                |
| 4          | phone motorolla | 2                |
| 5          | tablet apple    | 3                |
然后我有:

产品:

| cat_id | cat_name |
|--------|----------|
| 1      | tvs      |
| 2      | phones   |
| 3      | tablets  |
| product_id | product_name    | product_category |
|------------|-----------------|------------------|
| 1          | tv sony         | 1                |
| 2          | tv samsung      | 1                |
| 3          | phone htc       | 2                |
| 4          | phone motorolla | 2                |
| 5          | tablet apple    | 3                |
有人进入index.php,我从数据库中随机得到10个产品。为了创建链接,我必须再次获取数据库(获取类别名称),然后我可以执行类似于
mysite.com/phones/4
(这将是指向
phone motorola
的链接)

当然,10在服务器上不会太难,但它仍然是数据库上的另一个获取

另一个选项是在产品创建期间获取类别名称,并在其中生成链接,如:

| product_id | product_name    | product_category | product_link |
|------------|-----------------|------------------|--------------|
| 1          | tv sony         | 1                | tvs/1        |
| 2          | tv samsung      | 1                | tvs/2        |
| 3          | phone htc       | 2                | phones/3     |
| 4          | phone motorolla | 2                | phones/4     |
| 5          | tablet apple    | 3                | tablets/5    |

然而,类别的名称可能会改变,因此链接将不再工作。那我该怎么办?还有其他方法吗?

好的,在SQL中有一个非常强大的功能,叫做JOIN。SQL中的联接允许您基于键合并不同表中的列。通常,密钥是主键或外键

在您的情况下,您似乎有以下主键:cat\u idproduct\u id 作为外键,您有:产品类别 根据数据库架构,您可以按如下方式查询表:

SELECT p.product_id, p.product_name, c.cat_name
FROM PRODUCTS p INNER JOIN CATEGORIES c 
ON p.product_category = c.cat_id
通过此查询,您只需对数据库进行一次查询即可检索产品标识、产品名称和类别名称

下面是有关SQL=>


希望它能对您有所帮助。

做看起来最简单的事情,只有当它成为问题时才担心优化。为什么您不在产品和类别表之间建立SQL联接以获得产品和类别名称?@Arrabidas92我不知道SQL联接,我正在边走边学习,但现在我有一个问题,在我的categories表中,我实际上有3列,第三列是:
categority\u parent
,它要么是空的,要么是带有父类别ID的整数,我怎么能用join呢?我想你有输入错误。这是摩托罗拉,而不是摩托罗拉,你是对的,这只是一个例子!(:谢谢,这非常有用,不过我有一个问题,我在categories表中有第三列,它是
category\u parent
,是
NULL
,或者是一个带有父类别id的整数。是否也有方法使用SQL JOIN来检索它?当然,您可以检索任何您想要的列。唯一的条件是要在表之间建立连接,正如我所说,它们必须以某种方式通过键链接。好的,另一个问题,您在列名之前使用了
p.
,字母
p
是否任意?好问题!在SQL中,您可以使用较短的别名重命名列名和表名。这里p和c是表产品和类别的别名。ISQL中的一个常见习惯是在很长的查询中使用别名来使用较短的名称。使用别名的另一个有用的情况是,有一个列具有相同的名称,但位于两个不同的表中。为了区分这两个列,必须在列名alias.column\u name前面加上别名。如果忘记加上别名,可能会有一个e错误,如“ambigous name of column”=SQL必须采用哪一列。我只选择p,因为p是表产品的第一个字母,c是类别。这是另一个常见习惯。