亲爱的数据库专家/程序员:
我有一个带有用户信息的mysql表,例如
id user_id name etc.
1 userA
2 userB
3 userC
.. ..
.. ..
Run Code Online (Sandbox Code Playgroud)
我想创建一个像'跟随'其他用户的功能,如twitter.userA可以关注userB,或者userB可以关注userA,或者两者都可以互相关注.为此,我应该创建1个表,让我们说追随者
id user_id follower_id
1 userA userB
2 userC userA
3 userA userC
4 userB userC
5 userX userA
Run Code Online (Sandbox Code Playgroud)
现在我想找到谁跟随userA.我是这样的:从追随者中选择*,其中user_id = userA这将选择userB和userC.多数民众赞成我所需要的.
现在我想找到,userA正在关注哪些人(例如在上表中,userA跟随userC和userX.然后我应该从follower_id = userA的关注者那里运行类似Select*的东西.
我的问题是,这个数据库设计是否适合这个问题(考虑到数据库冗余和优化?)或者可以采用比这更好的方法?谢谢.
上个星期五,在法国节目比赛中,我们得到了纸张折叠问题,如下:
这可能不是很清楚,所以让我解释一下(方便一张纸可能有助于理解,如果你愿意走那么远来帮助我:)).
假设我们有一张正方形纸,我们绘制一个N*N网格,然后对其所有内部正方形进行编号.给定一个"LTRB"模式,我们将这张纸垂直折叠成两半,并将左边的部分放在右边.然后,我们将水平折叠并将顶部放在底部.然后,我们将它再次垂直折叠并将右侧部分放在左侧部分上.最后,我们将水平折叠并将底部放在顶部.这给我们留下了一张纸,大小为一平方和N ^ 2层.预期答案是每个原始正方形的结果顺序.
例如,如果我们在一张方形纸上绘制一个2*2网格,然后将每个内部正方形从1到4(从左上到右下,水平)编号,并给出模式"LT",我们就会有发生这种情况:
fold("LT"):
1 | 2 L 1,2 T
---|--- ==> --- ==> 2,1,3,4
3 | 4 3,4
Run Code Online (Sandbox Code Playgroud)
并使用"RB"模式,例如:
fold("RB"):
1 | 2 R 2,1 B
---|--- ==> --- ==> 3,4,2,1
3 | 4 4,3
Run Code Online (Sandbox Code Playgroud)
正如您可能已经猜到的那样,它基本上归结为N*N矩阵的递归变换.这是最简单的部分,这是我的解决方案:
现在是有趣的部分.
然后我的大脑停止工作了一段时间,我没有时间(总共4小时还剩2小时)来提出足够快的解决方案.
我最初的想法是:
试着暴力吧.因为我们知道输入的长度是N ^ 2,所以我们可以创建一个初始矩阵并尝试所有可能的折叠,直到我们达到与输入相同的顺序.O(4 ^ N)复杂性,不可行.
蛮力逆转.从输入开始,尝试所有展开的可能性,直到我们达到正确的初始状态.好一点,但仍然太慢.
???
有人有想法吗?
如何在不使用递归的情况下打印树的每个叶子路径.
它是一棵树,而不是二叉树
struct node {
int data
std::vector<node*> children;
}
Run Code Online (Sandbox Code Playgroud)
打印从根到叶的所有路径,即以下是树
-------------root ------d m n ---x y z o p
结果应该是:
root-d-x root-d-y root-d-z root-m root-n-o root-n-p
我尝试使用非递归方式但失败了.
在BigQuery API文档中,有一个名为patch的方法.我希望我可以用它来改变现有表的模式.不幸的是,bq不支持它.但根据他们的网站,您可以访问https://developers.google.com/bigquery/docs/reference/v2/tables/patch.但是,当我尝试它时,发送以下请求:
PATCH https://www.googleapis.com/bigquery/v2/projects/(my project id)/datasets/tmp_bt/tables/change_cols?key={YOUR_API_KEY}
Content-Type: application/json
Authorization: Bearer (removed)
X-JavaScript-User-Agent: Google APIs Explorer
{
"schema": {
"fields": [
{
},
{
},
{
"mode": "nullable",
"name": "gotchahere",
"type": "string"
}
]
}
}
Run Code Online (Sandbox Code Playgroud)
(我不知道空元素来自哪里,并且编辑器太难以用来粘贴我现有的表定义.我注意到它缺少必需的元素,比如我的项目ID,我希望它包括在内,因为它们在形式中被要求)然后我得到答复:
cache-control: private, max-age=0
content-encoding: gzip
content-length: 122
content-type: application/json; charset=UTF-8
date: Thu, 13 Jun 2013 22:22:09 GMT
expires: Thu, 13 Jun 2013 22:22:09 GMT
server: GSE
{
"error": {
"errors": [
{
"domain": "global",
"reason": "backendError",
"message": "Backend Error"
}
],
"code": …Run Code Online (Sandbox Code Playgroud) 我正在评估如何使用分布式键/值存储为后端实现某些功能.我希望在键/值的顶部有一个支持对象模型的层,它与我从对象关系映射器获得的类似.
任何人都可以指出其他人这样做的例子吗?我主要是在寻找设计思路,但是如果我遇到任何我喜欢的东西,我可能只是使用它而不是自己编写.我可能最终会在Riak的顶层实施Perl,但这些决定并非最终决定.
正如crontab的文档所解释的那样,如果MAILTO未设置,则输出将转到cron的所有者,如果MAILTO已设置且不为空,则表示邮件应该去哪里,如果设置为空,则不设置邮件.
有没有办法MAILTO在cron设置为某些东西之后取消设置环境变量?我已经尝试了明显的unset MAILTO和MAILTO=,但crontab -e不接受这些.
我有一个解决方法(确保我想要的所有默认邮件行为都在原始版本之前).但是我正在编写一个脚本来编写cron作业,能够设置/取消设置MAILTO而不必重新排序命令会很好.
如果重要的话,这将在Vixie cron下的Linux系统上运行.
编辑:澄清.我希望工作要么邮寄给所有者,要么邮寄给一个名为的用户MAILTO.我不希望MAILTO=''导致工作被邮寄到任何人的行为完全没有.
作为练习,我试图将https://developers.google.com/sheets/api/quickstart/nodejs从回调样式转换为承诺样式,然后使用util.promisify.
一切顺利,直到最终功能。原文是:
function listMajors(auth) {
const sheets = google.sheets({version: 'v4', auth});
sheets.spreadsheets.values.get({
spreadsheetId: '1BxiMVs0XRA5nFMdKvBdBZjgmUUqptlbs74OgvE2upms',
range: 'Class Data!A2:E',
}, (err, res) => {
if (err) return console.log('The API returned an error: ' + err);
const rows = res.data.values;
if (rows.length) {
console.log('Name, Major:');
// Print columns A and E, which correspond to indices 0 and 4.
rows.map((row) => {
console.log(`${row[0]}, ${row[4]}`);
});
} else {
console.log('No data found.');
}
});
}
Run Code Online (Sandbox Code Playgroud)
承诺的版本是:
function listMajors(auth) {
const sheets …Run Code Online (Sandbox Code Playgroud)