刚刚测试了AWS Redshift,并且在插件上发现了一些我希望在关键列中重复失败的重复数据,阅读文档显示主键约束没有"强制执行".
任何人都想出如何防止主键上的重复(按照"传统"期望).
感谢任何Redshift先驱!
我正在使用PHP5的本机SOAP方法创建Web服务.在我尝试使用SOAP Headers处理身份验证之前,一切都很顺利.
我可以很容易地找到如何将用户名/密码添加到SOAP标头,客户端:
$myclient = new SoapClient($wsdl, $options);
$login = new SOAPHeader($wsdl, 'email', 'mylogin');
$password = new SOAPHeader($wsdl, 'password', 'mypassword');
$headers = array($login, $password);
$myclient->__setSOAPHeaders($headers);
Run Code Online (Sandbox Code Playgroud)
但我无法找到任何收集和处理这些头服务器端的方法.我猜测必须有一种简单的方法来定义我的SoapServer中处理标题的方法......
假设我的DB方案如下:
T_PRODUCT
id_product (int, primary)
two entries: (id_product =1) , (id_product =2)
T_USER
id_user (int, primary)
id_product (int, foreign key)
name_user (varchar)
two entries: (id_product=1,name_user='John') , (id_product=1,name_user='Mike')
Run Code Online (Sandbox Code Playgroud)
如果我运行第一个查询来获取所有产品及其用户(如果有的话),我会得到:
SELECT T_PRODUCT.id_product, T_USER.name_user
FROM T_PRODUCT
LEFT JOIN T_USER on T_USER.id_product = T_PRODUCT.id_product;
>>
id_product name_user
1 John
1 Mike
2 NULL
Run Code Online (Sandbox Code Playgroud)
在我看来很好.现在,如果我想要同样的事情,除了我想每行有一个产品,带有连接的用户名(如果有任何用户,否则为NULL):
SELECT T_PRODUCT.id_product, GROUP_CONCAT(T_USER.name_user)
FROM T_PRODUCT
LEFT JOIN T_USER on T_USER.id_product = T_PRODUCT.id_product;
>>
id_product name_user
1 John,Mike
**expected output**:
id_product name_user
1 John,Mike
2 NULL
Run Code Online (Sandbox Code Playgroud)
如果产品没有用户,则GROUP_CONCAT会阻止mysql为此产品生成一行,即使存在LEFT JOIN也是如此.