gpt4 book ai didi

php - 选择具有默认值的列或具有用户定义值的列(如果不为空)?

转载 作者:行者123 更新时间:2023-12-01 00:32:48 25 4
gpt4 key购买 nike

我正在开发一个网络应用程序,其中包含一组用户可以浏览和编辑的数据。

用户想要自定义为每个项目显示的字段之一,比如“product_name”。

每个产品在一个表中都有一组默认值,这对所有用户都是一样的:

产品表就像(跳过语法废话,你懂的):

CREATE TABLE products (
pid int, # product id
pname varchar # product name (users want to customize this)
);

只要有该产品的自定义值,我就需要在我网站上的所有表格/列表中显示用户的自定义产品名称,否则显示默认值。

为了节省空间,我考虑使用一个额外的表格来“覆盖”任何给定用户和任何给定产品的默认值。根据需要将行添加到该表中。没有自定义任何产品名称的用户不会有任何行:

CREATE TABLE custom (
pid int,
userid int,
pname varchar
);

我可以很容易地在产品 ID 上加入这两个表,并且可以为 php 中的每一行选择默认值 (products.pname) 或用户编辑的值 (custom.pname),但我希望有更多在 MySQL 中执行此操作的有效方法。

是否有一个表达式让我选择一列(如果不为空),否则选择另一列(跨两个表)?

您会建议一种不同的方法来处理这个问题吗?

谢谢。

PS:也许是一种 JOIN 类型,它允许表 2 中具有相同名称的列为表 2 中存在的行覆盖表 1 中的列?

最佳答案

结合使用 LEFT JOIN 和 COALESCE:

   SELECT p.pid,
COALESCE(c.pname, p.pname) AS product_name
FROM PRODUCT p
LEFT JOIN CUSTOM c ON c.pid = p.pid
AND c.userid = ?

因为如果用户没有提供自定义名称,c.pname 将为 null,COALESCE 函数将默认使用下一个非 NULL 值--来自 p.pname

关于php - 选择具有默认值的列或具有用户定义值的列(如果不为空)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3702378/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com