鍍金池/ 問答/ 數(shù)據(jù)庫(kù)問答
你好胸 回答

1樓正解,另外empty set 是因?yàn)椴樵兘Y(jié)果為空,就是沒有符合的記錄(如果是多條記錄,回想列表一樣展開,當(dāng)成java的set就行),而不是null

挽青絲 回答
  • 也許這個(gè)項(xiàng)目有所謂的歷史遺留問題, 先有schema2.order。 再有schema1 。
  • 也是是技術(shù)老大想試試mongoArrey子集合分頁(yè)查詢好不好用。
  • 空間換時(shí)間。 數(shù)據(jù)庫(kù)輕輕松松破TB。

以上純屬妄言。。

另 : _id直接用做訂單id也可以啊, 本身mongo_id生成算法是分布式的一種id生成算法。時(shí)間戳+機(jī)器碼+進(jìn)程Id+隨機(jī)數(shù)

念初 回答

ip+端口訪問,若還是無法訪問的話,應(yīng)該是端口默認(rèn)被禁用了,去iptable里面開啟一下

吃藕丑 回答

查詢中給字段加別名
select cat_id, goods_name as gname from goods
給表加別名
select cat_id, goods_name from goods as g where g.cat_id > 1

select g.cat_id, g.goods_name, g.price as base_price, T.price as max_price from goods as g
left join (
 select gid, max(price) as price from order_good group by gid
) as T on g.id = T.gid

PS:SQL都是隨便寫的, 不一定對(duì)

大濕胸 回答

extra.IntegralIdObjectId,仔細(xì)看你的Mongoose輸出,你傳入的是字符串。所以應(yīng)該改為:

{$match: {"extra.integralId": new ObjectId(query._id)}}

當(dāng)然這里的_id是傳入的,所以你還應(yīng)該在new ObjectId之前進(jìn)行驗(yàn)證看是否合法。

咕嚕嚕 回答
是不是Student模型的的字段不能用變量表示?

可以。

不過,先說一點(diǎn),在 Python 中: obj['a']obj.a 是不一樣的,前者是 __getitem__ ,后者是 __getattribute__

你要用變量的話,可以 getattr(Student, key) == value ,不過,查詢一般不會(huì)這樣用。

報(bào)錯(cuò): 不可以遍歷QueryBase

看不出為什么,你查詢那句是沒問題的。

失魂人 回答

不尷尬啊,在Koa2要順序執(zhí)行就是需要把回調(diào)方式的函數(shù)用Promise封裝的.
_
或許你在Promise中把結(jié)果reslove出來再處理會(huì)好些。
我是這樣處理的:

function evalSimpleSql(sqlStr) {
  return new Promise((resolve, reject) => {
    pool.query(sqlStr, function (error, results) {
      if (error) reject(error);
      else {
        resolve(results);
      }
    });
  });
}

簡(jiǎn)單的sql語句就傳入evalSimpleSql執(zhí)行..
一些回調(diào)形式改寫成Promise形式的包,本質(zhì)也是這樣

爛人 回答

你這種寫法,如果在TABLE_2 中找不到T.CODE對(duì)應(yīng)的記錄,SET賦值語句中右邊的SQL會(huì)返回NULL,所以TABLE_1中的字段就變成NULL了。
如果想避免這種情況,可以在UPDATE的WHERE中增加一個(gè)限制條件:

UPDATE TABLE_1 T
 SET (T.TYPE_CODE, T.TYPE_TXT) =
   (SELECT S.TYPE_CODE, S.TYPE_TXT
      FROM TABLE_2 S
     WHERE S.CODE = T.CODE)
WHERE T.MONTH = TRUNC(SYSDATE, 'MM') AND
EXISTS(SELECT 1 FROM TABLE_2 WHERE TABLE_2 .CODE = T.CODE)
糖豆豆 回答

可能那張表中的某個(gè)字段和mysql的預(yù)留字段(比如to)沖突了,要轉(zhuǎn)義一下這個(gè)字段再查

陌顏 回答

mongooes我不怎么熟,所以我就寫查詢語句了
我不知道你的participant內(nèi)部是什么結(jié)構(gòu)
假如是

participant:[1,2,3]

然后要找id是1,那么查詢條件是

{participant:{$elemMatch:{$eq:1}}}

假如是

 participant:[{id:1,num:5}]

然后要找id是1,那么查詢條件是

{participant:{$elemMatch:{id:1}}}

$elemMatch

2^3 = 8 所以是3bit
2^4=16 所以是4bit

鐧簞噯 回答

漏了theme(),犯了個(gè)2b錯(cuò)誤。。。

孤客 回答

dev-server的地址是localhost:7777,API地址是localhost:3306,你請(qǐng)求的時(shí)候請(qǐng)求localhost:7777/api/newStu/searchNewStu應(yīng)該就好了

陪她鬧 回答

測(cè)試用例:

CREATE TABLE `test` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `months` varchar(7) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8;


insert  into `test`(`id`,`months`) values 
(1,'2018-01'),
(2,'2017-12'),
(3,'2017-11');

查詢語句

SELECT months AS WhichMonth,(SELECT DAY(LAST_DAY(CONCAT(months,'-01')))) AS TotalDays FROM test GROUP BY months

測(cè)試結(jié)果:

圖片描述

練命 回答

樓主的問題

  1. 限制同一用戶在不同瀏覽器登陸的功能,利用session這個(gè)方案是否合理?-- 合理
  2. 我理解每個(gè)瀏覽器向后端發(fā)送請(qǐng)求后,都會(huì)形成相應(yīng)的session保存起來,查詢session數(shù)據(jù)一般是怎樣實(shí)現(xiàn)的?例如,怎樣查詢包含”user“的session的”id“ -- 這個(gè)是session store的實(shí)現(xiàn)細(xì)節(jié),不同的store不一樣,一般是存在數(shù)據(jù)庫(kù)里(mysql、mongo、redis等)。session id是可以自定義的,只要能跟用戶名關(guān)聯(lián)起來就行
  3. 怎樣實(shí)現(xiàn)后端主動(dòng)向前端發(fā)起請(qǐng)求?比如用戶A未向后端發(fā)起請(qǐng)求的情況下,后端直接修改用戶A的cookie,使之過期? -- 這里在服務(wù)端清除session即可,有官方的api store.destroy(sid, callback)

怎么限制同個(gè)用戶不能多個(gè)地方同時(shí)登錄

實(shí)現(xiàn)思路樓主應(yīng)該是有的,只是實(shí)現(xiàn)細(xì)節(jié)不清楚:

  1. 用戶登錄,存儲(chǔ)session。每個(gè)用戶的session對(duì)應(yīng)一個(gè)id,假設(shè)就是用戶名。
  2. 用戶再次登錄,檢測(cè)當(dāng)前用戶是否已經(jīng)登錄 -> 檢測(cè)該用戶名,是否已經(jīng)存在session。

樓主不清除的應(yīng)該是,怎么把 用戶名、session id關(guān)聯(lián)起來,包括怎么在有用戶名的情況下,查詢到該用戶名對(duì)應(yīng)的session。

如果用express-session,可以這么實(shí)現(xiàn)。

genid選項(xiàng):生成session id

genid返回的是session對(duì)應(yīng)的id,樓主根據(jù)實(shí)際情況進(jìn)行自定義。

app.use(session({
  genid: function (req) {
    return req.query.usrname; // 生成session的id
  }
}));

session檢測(cè)

用戶再次登錄,通過session id 去檢測(cè)session是否存在,以此判斷用戶是否已登錄。

app.use(function (req, res, next) {
  req.sessionStore.get(req.query.usrname, function (error, session) {
    // 如果session存在,表示用戶已在其他地方登錄
  });
});
病癮 回答

試試這個(gè)看行嗎

# table_name為你的表名
SELECT COUNT(student_id) FROM table_name GROUP BY student_id HAVING SUM(score) > (SELECT SUM(score) FROM table_name WHERE student_id = 10); 
舊言 回答

limit n,m,表示起始值為n,然后取出m個(gè)記錄。如果batch size為25,那么可以:
limit 25,limit 25,25,limit50,25 ... 依次下去,默認(rèn)按照表的主鍵id升序排列,每次記錄最大的已處理記錄的主鍵id(這里基于了一個(gè)假設(shè),此表是自增主鍵)

如果此表沒有新增記錄,以上方法肯定沒問題,但是如果此表有多個(gè)事務(wù)并發(fā)寫入,可能會(huì)導(dǎo)致大id記錄先于小id記錄(兩個(gè)事務(wù))被處理,導(dǎo)致這部分小id記錄永遠(yuǎn)也不會(huì)被處理到。

問題中使用post_date其實(shí)也會(huì)有這個(gè)問題,無法保證post_date小的數(shù)據(jù)記錄一定先于post_date大的記錄先入庫(kù)。insert時(shí)間早,id小的記錄并不一定早于id大的記錄插入至數(shù)據(jù)庫(kù)。此完全取決于事務(wù)的提交時(shí)間。