小编Ric*_*mes的帖子

ActiveRecord连接条件满足所有关系

我有这样的数据库模型:

Post
    has_many :votes
    belongs_to :user
User
    has_many :posts
    has_many :votes
Vote
    belongs_to :post
    belongs_to :user
Run Code Online (Sandbox Code Playgroud)

我想要的是查询posts他尚未投票的特定用户.

我试过这样的:

Post.left_outer_joins(:votes).where.not(votes: { user_id: 1 })
Run Code Online (Sandbox Code Playgroud)

其中1只是一个示例用户ID.

问题是,这个查询好像获取所有posts这至少有一票的地方user_id不是1.
但由于不止一个用户会投票支持这些帖子,一旦有多个投票,所有用户现在都会收到所有帖子.

我不知道是否joins是正确的方法,但我的查询将是:

给我所有帖子,其中没有一个投票的user_id为1

是否有可能只posts为他尚未投票的用户提取?

编辑:

我上面三个表的数据库模式:

投票:

CREATE TABLE "votes" ("id" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL,
        "post_id" integer,
        "user_id" integer,
        "created_at" datetime NOT NULL,
        "updated_at" datetime NOT NULL,
        "vote_type" integer DEFAULT 0);
CREATE INDEX "index_votes_on_post_id" ON "votes" ("post_id");
CREATE INDEX …
Run Code Online (Sandbox Code Playgroud)

ruby mysql activerecord ruby-on-rails rails-activerecord

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

如何使用PHP在MySQL中存储'€'符号?

我已将PHP字符集设置为utf-8:

header('Content-Type: text/html; charset=utf-8');
Run Code Online (Sandbox Code Playgroud)

我已经将currencyMySQL中的列设置为varchar(1)整理utf8_unicode_ci.

但是,PHP中的以下代码:

$currency = '€';
$sql = "UPDATE myTable SET currency = '$currency' WHERE user = '$user'";
mysql_query($sql);
Run Code Online (Sandbox Code Playgroud)

在MySQL中生成以下字符:

â
Run Code Online (Sandbox Code Playgroud)

如何让符号在MySQL中正确存储?

php mysql variables scope utf-8

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

将MySQL UTF8迁移到UTF8MB4的问题和疑问

我试图将我的UTF8 MySQL 5.5.30数据库转换为UTF8MB4.我看过这篇文章https://mathiasbynens.be/notes/mysql-utf8mb4但有一些问题.

我做过这些

ALTER DATABASE database_name CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci;
ALTER TABLE table_name CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
Run Code Online (Sandbox Code Playgroud)

最后一个用62个表手动完成,其中一个给了我这个警告

13:08:30 ALTER TABLE bradspelold.games CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci 101289 row(s)受影响,2警告:1071指定密钥太长; 最大密钥长度为767字节1071指定密钥太长; 最大密钥长度为767字节记录:101289重复:0警告:2 3.016秒

  1. 这是一个问题吗?我该怎么办才能修好它?

下一步是

ALTER TABLE table_name CHANGE column_name column_name
         VARCHAR(191) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
Run Code Online (Sandbox Code Playgroud)
  1. 我不确定命令,为什么有2列名?
  2. 我应该只在VARCHAR(191)列上执行此操作吗?我不认为我有他们中的任何一个?
  3. 你知道更多这样的artickels解释了更多id详细的原因和方法吗?

编辑:

桌上游戏

CREATE  TABLE `games` (
        `id` int(10) unsigned NOT NULL DEFAULT \'0\',
        `name` varchar(255) NOT NULL,
        `description` mediumtext,
        `yearPublished` …
Run Code Online (Sandbox Code Playgroud)

mysql migrate utf-8 utf8mb4

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

PHP最快的方式是在MYSQL中注册数百万条记录

我必须在我的数据库中注册数百万的页面浏览量,我正在寻找减少服务器负载的最佳解决方案.

1.实际解决方案:检查是否唯一,并在"原始"表和"优化"表中注册

// script
$checkUnique = mysqli_query( $con, "SELECT FROM rawTable
         WHERE datatime = '$today' AND ip = '$ip'
         ORDER BY datetime DESC LIMIT 1" );
mysqli_query( $con, "INSERT INTO rawTable ( id, datetime, url, ip, ua )
         VALUES ( NULL, '$now', '$url', '$ip', '$ua' )" );
if( mysqli_num_rows( $checkUnique ) == 0 ) {
    mysqli_query( $con, "INSERT INTO optimizedTable ( id, day, total )
                         VALUES ( NULL, '$today', 1 )" ); }
else{
    mysqli_query( $con, "UPDATE optimizedTable SET total …
Run Code Online (Sandbox Code Playgroud)

php mysql performance

7
推荐指数
1
解决办法
1014
查看次数

如何更新xampp中的mysql版本(innodb_additional_mem_pool_size错误)

我正试着upgrade mysql进去xamp.我正在使用laravel哪个需要mariaDB v10.2.2.所以我latest msi package从中下载了mariaDB website.现在我按照以下几点安装相同的内容:

  • 将MySQL安装到C:\ TEMP.
  • 将旧安装文件夹设置为mysql_old.
  • 将以下文件夹"bin,include,lib,share,support-files"复制到xamp\mysql \文件夹.我没有复制数据文件夹
  • 将my.ini文件从旧安装复制到xamp\mysql\bin \文件夹中的新安装
  • 将旧数据文件夹复制到新的mysql文件夹

在这之后我尝试从控制面板启动mysql并显示以下错误:

XAMP控制面板错误截图

现在,在检查错误日志时,我发现了这个:

2017-02-25 12:31:56 5736 [Note] InnoDB: Mutexes and rw_locks use Windows interlocked functions
2017-02-25 12:31:56 5736 [Note] InnoDB: Uses event mutexes
2017-02-25 12:31:56 5736 [Note] InnoDB: Compressed tables use zlib 1.2.3
2017-02-25 12:31:56 5736 [Note] InnoDB: Number of pools: 1
2017-02-25 12:31:56 5736 [Note] InnoDB: Using generic crc32 instructions
2017-02-25 12:31:56 5736 …
Run Code Online (Sandbox Code Playgroud)

mysql xampp upgrade mariadb mysqlupgrade

7
推荐指数
2
解决办法
3万
查看次数

ERROR 1047 (08S01): 当我创建数据库或使用数据库时,WSREP 尚未准备好节点供应用程序使用

问这个问题之前,我搜索了stackoverflow,发现了一个类似的帖子:
mariadb galera - Error when a node shutdown ERROR 1047 WSREP尚未准备好节点供应用程序使用

但是,帖子是双节点集群,我的是三节点集群,并且在每个节点中,mariadb 都运行如下:

控制器 1:

[root@controller1 mysql]# systemctl status mariadb
? mariadb.service - MariaDB database server
   Loaded: loaded (/usr/lib/systemd/system/mariadb.service; enabled; vendor preset: disabled)
  Drop-In: /etc/systemd/system/mariadb.service.d
           ??migrated-from-my.cnf-settings.conf
   Active: active (running) since Tue 2017-07-04 19:34:22 CST; 19h ago
 Main PID: 3785 (mysqld)
   Status: "Taking your SQL requests now..."
   CGroup: /system.slice/mariadb.service
           ??3785 /usr/sbin/mysqld --wsrep_start_position=de05f291-60a9-11e7-a641-13dca5e08098:0

Jul 05 14:52:54 controller1 mysqld[3785]: 2017-07-05 14:52:54 139817407719168 [Note] WSREP: applier thread exiting (code:6)
Jul 05 14:52:54 controller1 …
Run Code Online (Sandbox Code Playgroud)

cluster-computing mariadb galera

7
推荐指数
1
解决办法
6920
查看次数

MySQL Update查询 - 在竞争条件和行锁定时是否会遵守"where"条件?(php,PDO,MySQL,InnoDB)

我正在尝试建立一个先到先得的模型销售页面.我们有n个相同类型的项目.我们希望将这n个项目分配给发出请求的前n个用户.对应于每个项目,有一个数据库行.当用户按下购买按钮时,系统会尝试查找尚未售出的条目(reservationCompleted = FALSE)并更新用户ID并设置reservationCompleted为true.

由于我使用的数据库引擎是InnoDB,我知道有一个内部锁定机制,不允许两个进程在同一行上一次更新.

我的问题是,

如果我正在使用的语句如下,如果两个请求同时到达,这是否会导致不同的用户被分配到同一行?

$query = "UPDATE available_items
    SET assignedPhone=".$user->phone.",
        reservationCompleted = TRUE,
        assignmentCreatedTimestamp =".time()."
    WHERE id=".$itemListing['id']."
    AND reservationCompleted=FALSE";
$stmt = $pdo->prepare($query);
$stmt->execute();
Run Code Online (Sandbox Code Playgroud)

考虑以下情况.

两个不同的进程获取相同的行(比如id = 5)并尝试更新DB条目.但其中一人获得了锁定.它更新项目并释放锁定,下一个进程获得锁定.那么,它会在执行更新之前再次验证where条件吗?

php mysql pdo innodb

7
推荐指数
1
解决办法
449
查看次数

如何从user和usermeta表中选择最后的用户信息?

我使用mysql,我在下面的表格中有两个表:

用户:
user_id - user_name - phone

UserMeta:
user_meta_id - user_id - meta_key - meta_value - meta_date

我有一些如下记录:

user_id: 23  
meta_key: gender  
meta_value: male  
meta_date: 1534533650



user_id: 23  
meta_key: city  
meta_value: london  
meta_date: 1534533650



user_id: 23  
meta_key: name  
meta_value: jack  
meta_date: 1534533650  



user_id: 25  
meta_key: name  
meta_value: Jamie 
meta_date: 1534593881  

user_id: 25  
meta_key: gender  
meta_value: male 
meta_date: 1534593881  

user_id: 23  
meta_key: gender  
meta_value: female  
meta_date: 1534595971

user_id: 23  
meta_key: city  
meta_value: liverpool  
meta_date: 1534595971 

And ...
Run Code Online (Sandbox Code Playgroud)

我需要获取所有注册的最新 …

mysql sql entity-attribute-value

7
推荐指数
2
解决办法
195
查看次数

如何将`\ data\^ Ihello $`加载为两列?

这是我的test-tab.csv如下.

\data\  hello
Run Code Online (Sandbox Code Playgroud)

注意:有一\t\htest-tab.csv,也就是说,在vim显示(组列表).

\data\^Ihello$
Run Code Online (Sandbox Code Playgroud)

准备加载数据.

create table tab(`f1` varchar(10),`f2` varchar(10));
Run Code Online (Sandbox Code Playgroud)

将数据加载到表中tab.

LOAD DATA LOCAL INFILE  "f:/test-tab.csv"
INTO TABLE  tab
FIELDS TERMINATED BY '\t'
LINES TERMINATED BY '\r\n'  \W;
Run Code Online (Sandbox Code Playgroud)

看看吧.

select * from tab;
+------------+------+
| f1         | f2   |
+------------+------+
| data  hello| NULL |
+------------+------+
1 row in set (0.000 sec)
Run Code Online (Sandbox Code Playgroud)

如何将数据加载到表中tab,如下所示.

select * from tab;
+------------+------+
| f1         | f2   |
+------------+------+
| …
Run Code Online (Sandbox Code Playgroud)

mysql load escaping

7
推荐指数
1
解决办法
110
查看次数

如何使用PHP和MySQL从两个有条件链接的表中有效地SUM和SUBTRACT

对于以下查询是否有更有效的解决方案.我尽力研究这个话题,但很难知道实际搜索的内容......

$tenant_balance = 0;

$total_charge_amount_query = mysqli_query($con, "
    SELECT  tenant_charge_id, tenant_charge_total_amount
        FROM  accounts_tenant_charge
        WHERE  tenant_charge_tenancy_id='{$tenancy_details['tenancy_id']}'"
     ) or die(mysql_error());  

while($total_charge_amount_row = mysqli_fetch_array( $total_charge_amount_query )) {

    $tenant_balance = $tenant_balance +  $total_charge_amount_row['tenant_charge_total_amount'];

    $total_payment_amount_query = mysqli_query($con, "
        SELECT  tenant_charge_payment_amount
            FROM  accounts_tenant_charge_payment
            WHERE  tenant_charge_payment_tenant_charge_id =
                    '{$total_charge_amount_row['tenant_charge_id']}"
                 ) or die(mysql_error());

    while($total_payment_amount_row = mysqli_fetch_array( $total_payment_amount_query )) {

        $tenant_balance = $tenant_balance - $total_payment_amount_row['tenant_charge_payment_amount'];

    }
}

echo '£' . number_format($tenant_balance, 2, '.', ',');
Run Code Online (Sandbox Code Playgroud)

我在下面添加了数据库表结构和一些数据.

表格1

-- phpMyAdmin SQL Dump
-- version 4.0.10.7
-- http://www.phpmyadmin.net
--
-- Host: localhost
-- …
Run Code Online (Sandbox Code Playgroud)

php mysql performance

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