使用PHP调用SQL外键数据
作者:互联网
我需要更好地掌握操作和利用我需要的SQL表的过程,这样我就可以继续弄清楚我应该如何制作它们并将它们组织起来.
如果我有一个衬衫表和另一个大小表,我在衬衫表上使用外键链接到尺寸表以表示该列的多个选项.我只需要在PHP编码中调用衬衫表吗?如果是这样,我如何告诉PHP收集大小表上每行可用的任何选项?
如果在表中它有
vneck尺寸,
铲颈尺寸
我把它设置在vnecks只有s,m,l,1x的位置,而scoop脖子有xs,s,m,l,1x,2x,3x.我如何编写PHP代码以识别我在该列的每一行中逻辑设置的差异?
解决方法:
使用以下表结构:
CREATE TABLE `shirt` (
`id` INTEGER NOT NULL,
`name` VARCHAR(32),
PRIMARY KEY( `id` )
);
CREATE TABLE `size` (
`id` INTEGER NOT NULL,
`name` VARCHAR(4),
PRIMARY KEY( `id` )
);
CREATE TABLE `shirt_size` (
`shirtId` INTEGER NOT NULL,
`sizeId` INTEGER NOT NULL,
PRIMARY KEY( `shirtId`, `sizeId` ),
FOREIGN KEY( `shirtId` ) REFERENCES `shirt`( `id` ),
FOREIGN KEY( `sizeId` ) REFERENCES `size`( `id` )
);
这个数据:
INSERT INTO
`shirt` ( `id`, `name` )
VALUES
( 1, "vneck" ),
( 2, "scoop neck" );
INSERT INTO
`size` ( `id`, `name` )
VALUES
( 1, "xs" ), ( 2, "s" ), ( 3, "m" ),
( 4, "l" ), ( 5, "1x" ), ( 6, "2x" ), ( 7, "3x" );
INSERT INTO
`shirt_size` ( `shirtId`, `sizeId` )
VALUES
( 1, 2 ), ( 1, 3 ), ( 1, 4 ), ( 1, 5 ),
( 2, 1 ), ( 2, 2 ), ( 2, 3 ), ( 2, 4 ), ( 2, 5 ), ( 2, 6 ), ( 2, 7 );
在MySQL中你可以这样做:
SELECT
`shirt`.`id`,
`shirt`.`name`,
GROUP_CONCAT( `size`.`name` ) as `sizes`
FROM
`shirt`
JOIN
`shirt_size`
ON `shirt_size`.`shirtId` = `shirt`.`id`
JOIN
`size`
ON `size`.`id` = `shirt_size`.`sizeId`
GROUP BY `shirt`.`id`;
这将导致类似于:
+----+------------+-------------------+
| id | name | sizes |
+----+------------+-------------------+
| 1 | vneck | s,m,l,1x |
+----+------------+-------------------+
| 2 | snoop neck | xs,s,m,l,1x,2x,3x |
+----+------------+-------------------+
不确定其他RDBMS是否具有类似于MySQL的GROUP_CONCAT()的聚合函数.如果没有,那么使用如下:
SELECT
`shirt`.`id`,
`shirt`.`name` as `shirtName`,
`size`.`name` as `sizeName`
FROM
`shirt`
JOIN
`shirt_size`
ON `shirt_size`.`shirtId` = `shirt`.`id`
JOIN
`size`
ON `size`.`id` = `shirt_size`.`sizeId`;
每件衬衫都会为每种尺码提供多排.
标签:php,sql,foreign-keys,relationships 来源: https://codeday.me/bug/20190729/1569741.html