小编mbo*_*las的帖子

mysql在连接查询中慢计数

所以我有两个表,我需要能够得到计数.其中一个包含内容,另一个包含它与类别表之间的关系.这是DDl:

CREATE TABLE content_en (
    id int(11) NOT NULL AUTO_INCREMENT,
    title varchar(100) DEFAULT NULL,
    uid int(11) DEFAULT NULL,
    date_added int(11) DEFAULT NULL,
    date_modified int(11) DEFAULT NULL,
    active tinyint(1) DEFAULT NULL,
    comment_count int(6) DEFAULT NULL,
    orderby tinyint(4) DEFAULT NULL,
    settings text,
    permalink varchar(255) DEFAULT NULL,
    code varchar(3) DEFAULT NULL,
    PRIMARY KEY (id),
    UNIQUE KEY id (id),
    UNIQUE KEY id_2 (id) USING BTREE,
    UNIQUE KEY combo (id,active) USING HASH,
    KEY code (code) USING BTREE
) ENGINE=MyISAM AUTO_INCREMENT=127126 DEFAULT CHARSET=utf8;
Run Code Online (Sandbox Code Playgroud)

而对于另一张桌子

CREATE TABLE …
Run Code Online (Sandbox Code Playgroud)

mysql sql

10
推荐指数
2
解决办法
5394
查看次数

node.js表示ajax会话

我有快递和ajax会议的问题.我的应用程序通过Ajax(POST和GET)接收请求并设置会话变量.如果请求不是来自ajax,则会话工作正常,而在相反的情况下,它们只是不起作用.例如 :

if (typeof req.session.id == 'undefined'){
req.session.id = 1;
Run Code Online (Sandbox Code Playgroud)

}

else {
req.session.id++;
 } 
res.send({session:req.session.id});
Run Code Online (Sandbox Code Playgroud)

现在,当我做localhost:3000 /一切都很好,它每次都递增.如果我从角度通过$ http做同样的事情我继续得到1.我在PHP尝试相同,以防万一角度有问题,但它的工作正常.请注意,ajax调用来自localhost:80

我的快递设置:

app.use(express.bodyParser());
app.use(express.cookieParser('secret'));
app.use(express.cookieSession({secret:'mySecret'}));
app.use(express.session({store:new express.session.MemoryStore(),maxAge : new Date(Date.now() + 3600000)}));
app.use(app.router)
Run Code Online (Sandbox Code Playgroud)

编辑

通过执行console.log(req); 我注意到,当不是来自AJAX我得到:

 cookies:
Run Code Online (Sandbox Code Playgroud)

{PHPSESSID:'jm2p2kn7etmofrp48s8sv4pu47',ZDEDebuggerPresent:'php','':'phtml',user_admin:'MTUzOnJvb3Q6U2ptaHJpZmllaG8 =','connect.sess':'s:j:{"id":7} .oIAoC356/z4fQ + + iH44N7YxWZWEP49bTHp1h/gpAElY'}

但是当我从AJAX来的时候我得到{}

ajax node.js

8
推荐指数
1
解决办法
2932
查看次数

Eloquent count distinct 返回错误的总数

我对如何雄辩地制定我无法访问的查询有疑问。当做类似的事情时

$model->where('something')
->distinct()
->paginate();
Run Code Online (Sandbox Code Playgroud)

eloquent 运行查询以获取总数,查询看起来像

select count(*) as aggregate from .....
Run Code Online (Sandbox Code Playgroud)

问题是,如果您在查询中使用 distinct ,您需要类似

select count(distinct id) as aggregate from .....
Run Code Online (Sandbox Code Playgroud)

以获得正确的总数。Eloquent 并没有这样做,因此返回了错误的总数。获得不同计数的唯一方法是通过查询构建器传递一个参数,如 ->count('id') 在这种情况下它将添加它。问题是这个查询是自动生成的,我无法控制它。

有没有办法欺骗它在计数查询上添加不同的?

PS 深入挖掘构建器代码,我们发现一个 IF 语句要求 count() 方法上的一个字段,以便将不同的属性添加到计数中。Illuminate\Database\Query\Grammars\BaseGrammar@compileAggregate

if ($query->distinct && $column !== '*')
{
   $column = 'distinct '.$column;
}
return 'select '.$aggregate['function'].'('.$column.') as     aggregate';
Run Code Online (Sandbox Code Playgroud)

PS1 我知道在 SQL 中你可以做一个分组,但是由于我急于加载东西,这不是一个好主意,因为它会向其他每个查询添加一个 IN(找到的 id 数量),这会显着减慢速度.

mysql eloquent laravel-4

6
推荐指数
1
解决办法
4313
查看次数

loopback关系数据库hasManyThrough数据透视表

我似乎陷入了经典的ORM问题,并且不知道如何处理它,所以在这一点上欢迎任何帮助.

有没有办法在hasManyThrough查询上获取数据透视表?更好的是,应用一些过滤器或排序.一个典型的例子

表产品

id,title
Run Code Online (Sandbox Code Playgroud)

表类别

id,title
Run Code Online (Sandbox Code Playgroud)

table products_categories

productsId, categoriesId, orderBy, main
Run Code Online (Sandbox Code Playgroud)

因此,在上面的场景中,假设您希望获得(main = true)的所有类别的产品X,或者您希望按类别对产品类别进行排序orderBy.

现在会发生什么是第一SELECT的产品,以获得产品数据,第二SELECT对products_categories获得categoriesId和最终SELECT的类别,以获得实际的类别.理想情况下,过滤器和排序应该适用于第二SELECT

SELECT `id`,`productsId`,`categoriesId`,`orderBy`,`main` FROM `products_categories` WHERE `productsId` IN (180) WHERE main = 1 ORDER BY `orderBy` DESC
Run Code Online (Sandbox Code Playgroud)

另一个典型的例子是希望根据用户想要的订单来订购产品图像

所以你会有一个products_images表

id,image,productsID,orderBy
Run Code Online (Sandbox Code Playgroud)

你会想要的

SELECT from products_images WHERE productsId In (180) ORDER BY orderBy ASC
Run Code Online (Sandbox Code Playgroud)

这甚至可能吗?

编辑:这是中间表根据我的架构获得我需要的内容所需的关系.

Products.hasMany(Images,
    {
        as: "Images",
        "foreignKey": "productsId",
        "through": ProductsImagesItems,
        scope: function (inst, filter) {
            return {active: 1};
        }
    });
Run Code Online (Sandbox Code Playgroud)

事情是范围功能让我访问最终结果而不是中间表.

node.js strongloop loopbackjs

6
推荐指数
1
解决办法
538
查看次数

mongodb聚合在同一字段上匹配多个$ and

我有一个像这样的文件:

{
    "ExtraFields" : [
    {
        "value" : "print",
        "fieldID" : ObjectId("5535627631efa0843554b0ea")
    },
    {
        "value" : "14",
        "fieldID" : ObjectId("5535627631efa0843554b0eb")
    },
    {
        "value" : "POLYE",
        "fieldID" : ObjectId("5535627631efa0843554b0ec")
    },
    {
        "value" : "30",
        "fieldID" : ObjectId("5535627631efa0843554b0ed")
    },
    {
        "value" : "0",
        "fieldID" : ObjectId("5535627631efa0843554b0ee")
    },
    {
        "value" : "0",
        "fieldID" : ObjectId("5535627731efa0843554b0ef")
    },
    {
        "value" : "0",
        "fieldID" : ObjectId("5535627831efa0843554b0f0")
    },
    {
        "value" : "42",
        "fieldID" : ObjectId("5535627831efa0843554b0f1")
    },
    {
        "value" : "30",
        "fieldID" : ObjectId("5535627831efa0843554b0f2")
    },
    {
        "value" : …
Run Code Online (Sandbox Code Playgroud)

mongodb aggregation-framework

4
推荐指数
1
解决办法
1万
查看次数

mysql加载数据infile

我必须执行以下查询的负载

UPDATE translations SET translation = (SELECT description FROM content WHERE id = 10) WHERE id = 1;
Run Code Online (Sandbox Code Playgroud)

现在,我使用加载数据infile进行插入和替换,但我想要的是esense只更新该表中每行的1个字段,而不会弄乱键.可能是什么语法,请注意查询仅影响现有行.

感谢名单

mysql

3
推荐指数
1
解决办法
1060
查看次数

Laravel 5 Model $ cats to array utf-8 JSON_UNESCAPED_UNICODE

当你有一个数组字段并将其保存在数据库中时,它会为数组提供一个漂亮的json_encode但没有JSON_UNESCAPED_UNICODE选项.数据最终如下:

{"en":"\u039d\u03ad\u03b1"}

这几乎没用.解决方案当然是json_encode和JSON_UNESCAPED_UNICODE标志.在保存模型之前,是否可以告诉Laravel添加此选项?

我试图避免使用setNameAttribute mutator,因为每次我有这种类型的字段时这样做会很麻烦

php laravel laravel-5 laravel-5.2

3
推荐指数
1
解决办法
2551
查看次数

Mysql交叉结果

我正在尝试做类似PHP的事情array_intersect.我有下表

CREATE TABLE `recipes_ingredients_items` (
  `id` INTEGER(11) DEFAULT NULL,
  `itemid` INTEGER(11) DEFAULT NULL,
  `orderby` TINYINT(4) NOT NULL,
  KEY `id` (`id`),
  KEY `itemid` (`itemid`)
)ENGINE=MyISAM
AVG_ROW_LENGTH=47 CHARACTER SET 'utf8' COLLATE 'utf8_general_ci';  
Run Code Online (Sandbox Code Playgroud)

我需要一个查询,它会将包含id为2,72,64的所有结果作为一个不同的itemid.问题是id可能在itemid中不止一次存在,即itemid 600可能有3行,其中id为2,100,2.
我的想法是让一个查询说x number o子查询返回结果并执行类似PHP的操作array_intersect,从而返回具有所有这些id的itemid.

SELECT DISTINCT itemid  FROM recipes_ingredients_items
WHERE 
id IN (SELECT DISTINCT itemid FROM recipes_ingredients_items WHERE id = 71) 
AND 
id IN (SELECT DISTINCT  itemid FROM recipes_ingredients_items WHERE id = 2)
AND 
id IN (SELECT DISTINCT  itemid FROM recipes_ingredients_items WHERE id = 22) …
Run Code Online (Sandbox Code Playgroud)

php mysql

2
推荐指数
1
解决办法
2026
查看次数