社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
私信  •  关注

Paul Spiegel

Paul Spiegel 最近创建的主题
Paul Spiegel 最近回复了
8 年前
回复了 Paul Spiegel 创建的主题 » 在MySQL中生成唯一字符串的最简单方法是什么?[重复]

您可以使用以下命令生成随机字母数字字符串:

lpad(conv(floor(rand()*pow(36,8)), 10, 36), 8, 0);

你可以把它用在 BEFORE INSERT 触发并检查while循环中是否存在重复:

CREATE TABLE `vehicles` (
    `plate` CHAR(8) NULL DEFAULT NULL,
    `data` VARCHAR(50) NOT NULL,
    UNIQUE INDEX `plate` (`plate`)
);

DELIMITER //
CREATE TRIGGER `vehicles_before_insert` BEFORE INSERT ON `vehicles`
FOR EACH ROW BEGIN

    declare str_len int default 8;
    declare ready int default 0;
    declare rnd_str text;
    while not ready do
        set rnd_str := lpad(conv(floor(rand()*pow(36,str_len)), 10, 36), str_len, 0);
        if not exists (select * from vehicles where plate = rnd_str) then
            set new.plate = rnd_str;
            set ready := 1;
        end if;
    end while;

END//
DELIMITER ;

现在只需像这样插入数据

insert into vehicles(col1, col2) values ('value1', 'value2');

触发器将为 plate

( sqlfiddle demo )

如果列允许空值,则这种方式有效。如果希望它不为NULL,则需要定义一个默认值

`plate` CHAR(8) NOT NULL DEFAULT 'default',

如果不需要大写字母数字,也可以在触发器中使用任何其他随机字符串生成算法。但触发器将考虑独特性。

6 年前
回复了 Paul Spiegel 创建的主题 » mysql:从两个表中组合信息的查询

使用左连接:

SELECT g.name, g.id as userId, COUNT(i.userId) as nbr_entries
FROM generic g
LEFT JOIN info i ON i.userId = g.id
GROUP BY g.id
ORDER BY nbr_entries DESC

这样,您还将包括没有信息条目的用户,并获得 0 作为 nbr_entries .

你可以从这里开始:

SELECT a.PERSON, a.IN, b.OUT, TIMESTAMPDIFF(SECOND, a.IN, b.OUT) AS TOTAL
FROM presence a
LEFT JOIN presence b ON b.id = (
  SELECT MIN(b2.id)
  FROM presence b2
  WHERE b2.PERSON = a.person
    AND b2.id > a.id
    AND b2.OUT IS NOT NULL
)
WHERE a.IN IS NOT NULL
ORDER BY a.IN;

它将返回:

PERSON      IN                      OUT                     TOTAL
-----------------------------------------------------------------
Person F    2019-03-11 07:35:00     2019-03-11 15:28:10     28390
Person E    2019-03-11 07:35:20     2019-03-11 15:15:50     27630
Person D    2019-03-11 07:58:50     2019-03-11 15:14:20     26130
Person C    2019-03-11 08:04:40     2019-03-11 13:19:50     18910
Person B    2019-03-11 08:32:00     2019-03-11 14:57:00     23100
Person A    2019-03-11 08:59:30     2019-03-11 15:00:50     21680

Demo

查询连接一行,该行的值为 IN 同一个人的下一行 OUT . 这假设 id 是自动递增主键,数据正确。

现在可以将其更改为按查询分组。

6 年前
回复了 Paul Spiegel 创建的主题 » php-mysql联合查询

自从 MySQL5.7.22 你可以用 JSON_OBJECTAGG(key, value) :

SELECT post_id, JSON_OBJECTAGG(meta_key, meta_value) AS meta_data
FROM wp_postmeta
WHERE post_id IN (SELECT id from wp_posts WHERE post_type = 'product')
GROUP by post_id

这个会回来的 meta_data 作为json_对象 key: value 对:

post_id | meta_data
   2549 | {"_sku": "HCS-DGMP", "_weight": "0.50", "_virtual": "no", "_featured": "no", "_sale_price": null, "_tax_status": "taxable", "_visibility": "visible", "total_sales": "0", "_regular_price": "18.99", "_product_attributes": "a:0:{}"}

Demo

如果服务器不支持 JSON_OBJECTAGG() ,我将使用一个PHP解决方案:

$postIds = array_unique(array_column($dbResult, 'post_id'));

$posts = [];
foreach ($postIds as $id) {
    $posts[$id] = (object)['id' => $id];
}

foreach ($dbResult as $row) {
    $posts[$row->post_id]->{$row->meta_key} = $row->meta_value;
}

echo json_encode(array_values($posts), JSON_PRETTY_PRINT);

结果:

[
    {
        "id": "2549",
        "total_sales": "0",
        "_virtual": "no",
        "_tax_status": "taxable",
        "_visibility": "visible",
        "_featured": "no",
        "_weight": "0.50",
        "_sku": "HCS-DGMP",
        "_product_attributes": "a:0:{}",
        "_regular_price": "18.99",
        "_sale_price": ""
    }
]

Demo

只要您不处理数千行,我就不会担心性能。