如果我在数据库中有以下列:
if('src' in elem){
//src is a valid attribute for elem
}
我想更改表并基于“电子邮件”列创建唯一的ID列。如下所示:
<label>Element Type: <input type="text" id="elemType"/></label>
<br/>
<button id="process">
Process
</button>
<p id="result">
</p>
<script>
var elemTypeInput = document.getElementById("elemType"), processBtn = document.getElementById("process"), res = document.getElementById("result");
processBtn.addEventListener("click", function(e){
var elemType = elemTypeInput.value;
if(!elemType.trim()){
res.textContent = "Element Type can not be empty!";
} else {
try{
var elem = document.createElement(elemType);
var hasSrc = 'src' in elem;
res.textContent = elemType + " element has src attribute: " + hasSrc;
} catch(e){
res.textContent = "Please enter a valid element type.";
}
}
});
</script>
答案 0 :(得分:2)
我建议您使用整数作为值-而不是字符串。然后,您可以将变量用于分配:
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script src="//cdnjs.cloudflare.com/ajax/libs/jqueryui/1.11.2/jquery-ui.min.js"></script>
<div class="slides">
<div class="slide slide1">Slide 1</div>
<div class="slide slide2">Slide 2</div>
<div class="slide slide3">Slide 3</div>
<div class="slide slide4">Slide 4</div>
<div class="slide slide5">Slide 5</div>
</div>
如果运行子查询,您将看到它为每封电子邮件分配了一个不同的编号。
然后,外部查询将此数字分配给alter table t add email_id int;
update t join
(select email, (@rn := @rn + 1) as rn
from (select distinct email from t order by email) t cross join
(select @rn := 0) params
) tt
on t.email = tt.email
set t.email_id = tt.rn;
列。在MySQL 8+中,您还可以编写:
email_id
答案 1 :(得分:1)
如果您使用的是MySQL 8或更高版本,则DENSE_RANK
在此处提供了一个不错的选择:
SELECT
Email,
LPAD(CAST(DENSE_RANK() OVER (ORDER BY Email) AS CHAR(3)), 3, '0') AS Email_ID
FROM yourTable
ORDER BY
Email;
我建议可能只是在表中添加一个自动递增列,但这并不能完全满足您的要求,因为自动递增列将始终是唯一的。
答案 2 :(得分:1)
这就是我要做的...
使用唯一的 for element in B:
element + '_norm' = (element - element.mean())/ (element.max() -
element.min())
列创建新表
email
使用您的当前数据进行播种
CREATE TABLE `emails` (
id INT(3) PRIMARY KEY AUTO_INCREMENT,
email VARCHAR(255) UNIQUE
);
更改现有表以引用INSERT INTO `emails` (`email`)
SELECT DISTINCT `email` FROM `some_mystery_table`
ORDER BY `email`;
作为外键。这可能有点棘手,因为您可能需要(可能)
emails(id)
列int
使用与电子邮件地址相对应的email_id
值更新数据
id
删除UPDATE some_mystery_table, emails
INNER JOIN emails ON some_mystery_table.email = emails.email
SET some_mystery_table.email_id = emails.id;
列
email
引用email_id
在显示数据时,您需要使用零填充的电子邮件emails(id)
,请加入id
表,例如
emails
添加新的电子邮件记录时,首先将它们添加到SELECT a.whatever, e.email, LPAD(e.id, 3, '0') AS email_id
FROM some_mystery_table a
INNER JOIN emails e ON a.email_id = e.id;
,然后在任何其他相关表中使用生成的emails
。
答案 3 :(得分:0)
ALTER TABLE emails add column `email_id` int(5) ZEROFILL PRIMARY KEY AUTO_INCREMENT;
SET @x:=0;
UPDATE emails SET email_id = LPAD(@x:= (@x+1),4, '0') WHERE 1=1;
我们首先使用以下查询将列email_id
添加到表emails
并将其设置为主键:
ALTER TABLE emails add column `email_id` int(5) ZEROFILL PRIMARY KEY AUTO_INCREMENT;
然后,我们声明一个名为x的全局变量,默认值为0:
SET @x:=0;
最后,我们用增量零填充ID填充列:
UPDATE emails SET email_id = LPAD(@x:= (@x+1),4, '0') WHERE 1=1;
我们用LPAD填充了零。