我无法使用阿拉伯语文本进行变音符号不敏感搜索。
我已经为相关表测试了多种设置:utf8 和 utf16 中的编码以及 utf8_general_ci、utf16_general_ci 和 utf16_unicode_ci 中的排序规则。
搜索适用于 åä 特殊字符。IE:
select * from test where text like '%a%'
Run Code Online (Sandbox Code Playgroud)
将返回文本为 a、å 或 ä 的列。但它不适用于阿拉伯语变音符号。即如果文本是?????? 我搜索???,我没有得到任何点击。
任何想法如何通过这个?
真正的用途稍后将是 PHP(一个搜索功能),但我直接在 MySQL 数据库中工作,只是为了在将其移植到 PHP 之前进行测试。
(来自评论)
CREATE TABLE test (
? id int(11) unsigned NOT NULL AUTO_INCREMENT,
? text text COLLATE utf8_unicode_ci,
? PRIMARY KEY (id)?
) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci
Run Code Online (Sandbox Code Playgroud) 对于以下查询是否有更有效的解决方案.我尽力研究这个话题,但很难知道实际搜索的内容......
$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) 在我的数据库中有3列,分别是姓名,年龄,性别.在程序中,我只想使用1个搜索按钮.单击该按钮时,程序将确定文本框中的哪3个输入并搜索正确的数据.
你如何使用查询?例如,如果Name和Gender有文本,则查询:
" Select * from table Where (Name = @name) AND (Gender = @gender)"
当只输入名称时,我只查询名称.我是否必须按文本框检查文本框是否有用户输入,然后为每个文本框写入多个查询?或者有更好的方法吗?
编辑(29/5/16):我尝试这样做另一种方式
myCommand = New MySqlCommand("Select * from project_record Where
(FloatNo = @floatNo OR FloatNo = 'None') AND
(DevCompanyName = @devCompanyName OR DevCompanyName = 'None') AND
(DevType = @devType OR DevType = 'None') AND
(LotPt = @lotPt OR LotPt = 'None') AND
(Mukim = @mukim OR Mukim = 'None') AND
(Daerah = @daerah OR Daerah = 'None') AND
(Negeri = @negeri OR Negeri = …Run Code Online (Sandbox Code Playgroud) OS=centos 6.7 [Dedicated server]
memory=15G
cpu=Intel(R) Xeon(R) CPU E5-2403
mysql= V 5.1.73
Run Code Online (Sandbox Code Playgroud)
这是一个MyISAM表,包含大约500万行数据.在每5-6分钟插入大约3000个用户的数据(例如上传和下载速率,会话状态等).
表信息:描述"radacct"
从mysql慢查询日志中获取大部分时间的查询之一如下
Query_time: 7.941773 Lock_time: 0.155912 Rows_sent: 1 Rows_examined: 5377
use freeradius;
SET timestamp=1461582118;
SELECT sum(acctinputoctets) as upload,
sum(acctoutputoctets) as download
FROM radacct a
INNER JOIN (SELECT acctuniqueid, MIN( radacctid ) radacctid
FROM radacct
WHERE username='batman215'
and acctstarttime between '2016-02-03 12:10:47'
and '2016-04-25 16:46:01'
GROUP BY acctuniqueid) b
ON a.acctuniqueid = b.acctuniqueid
AND a.radacctid = b.radacctid;
Run Code Online (Sandbox Code Playgroud)
当有许多用户试图查看其消耗的带宽时,由于高负载和IO,服务器无法满足请求.我有什么办法可以进一步优化数据库吗?
表"radacct"的索引
谢谢
我在 Doctrine 中有以下 SELECT 子句(查询本身是使用查询构建器创建的):
u.username,
MAX(p.score) as highscore,
SUM(pc.badgeCount) as badgeCount,
(SUM(pc.badgeCount) / :badgeSum) AS probability,
(-LOG(RAND()) * probability) as weight
Run Code Online (Sandbox Code Playgroud)
(p是主实体的别名,pc是连接实体)
这给了我来自 MySQL 的错误消息:
SQLSTATE[42S22]: Column not found: 1054 Unknown column 'probability' in 'field list'
Run Code Online (Sandbox Code Playgroud)
如何在同一个 SELECT 子句中重用创建的别名?
我的表“my_logs”有大约 20,000,000 条记录,我想找出几天内每个日期有多少日志。
我想要一个结果
+------------+---------+
| date | count |
+------------+---------+
| 2016-07-01 | 1623 |
| 2016-07-02 | 1280 |
| 2016-07-03 | 2032 |
+------------+---------+
下面的这个查询只需要几毫秒就可以完成,这很好
SELECT DATE_FORMAT(created_at, '%Y-%m-%d') as date,
COUNT(*) as count
FROM my_logs
WHERE created_at BETWEEN '2016-07-01' AND '2016-07-04'
GROUP BY DATE_FORMAT(created_at, '%Y-%m-%d')
Run Code Online (Sandbox Code Playgroud)
查询说明:
+------------+---------+-------+-----------------------------+
|select_type | table | type | possible_keys |
+------------+---------+-------+-----------------------------+
| SIMPLE | my_logs| index | index_my_logs_on_created_at |
+------------+---------+-------+-----------------------------+
+-----------------------------+---------+----------+
| key | key_len | rows |
+-----------------------------+---------+----------+
| index_my_logs_on_created_at | …
我正在尝试创建一个数据库,其中可能有n多个类别及其子类别.
首先,我尝试创建这样的邻接模型数据库
+-------------+----------------------+--------+
| category_id | name | parent |
+-------------+----------------------+--------+
| 1 | Electronics | NULL |
| 2 | Mobile | 1 |
| 3 | Washing Machine | 1 |
| 4 | Samsung | 2 |
+-------------+----------------------+--------+
Run Code Online (Sandbox Code Playgroud)
但是,我在删除节点时遇到了问题,比如如何管理已删除节点的子节点等.
然后我试图实现Joe Celko的嵌套订单集

每个图中的表结构:
Figure 1:
+----+-------------+-----+-----+
| id | name | lft | rgt |
+----+-------------+-----+-----+
| 1 | Electronics | 1 | 2 |
+----+-------------+-----+-----+
Figure 2:
+----+-------------+-----+-----+
| id | name | …Run Code Online (Sandbox Code Playgroud) 我正在使用Laravel构建搜索列表应用程序; 该应用程序需要按距离(我已经建立)搜索企业,并包括对企业的最新订阅(如果有的话),以便我可以通过它然后距离来订购.
这里的两个模型是商业和订阅.一个企业可以拥有许多订阅(虽然只会有一个活跃的订阅).
调节器
$businesses = Business::distance($place['lat'], $place['lng'], $request->distance)
->ofShopType($request->shop_type)
->uptoBudget($request->price)
->leftJoin('subscriptions', function($join) {
$join->on('businesses.id', '=', 'subscriptions.business_id')
->orderBy('subscriptions.created_at', 'desc');
});
return $businesses = $businesses->get();
Run Code Online (Sandbox Code Playgroud)
商业模式
public function scopeDistance($query,$from_latitude,$from_longitude,$distance)
{
$raw = \DB::raw('ROUND ( ( 3959 * acos( cos( radians('.$from_latitude.') ) * cos( radians( latitude ) ) * cos( radians( longitude ) - radians('.$from_longitude.') ) + sin( radians('.$from_latitude.') ) * sin( radians( latitude ) ) ) ), 1 ) AS distance');
return $query->select('*')->addSelect($raw)
->orderBy( 'distance', 'ASC' )
->groupBy('businesses.id')
->having('distance', '<=', $distance); …Run Code Online (Sandbox Code Playgroud) 我有一张桌子叫place:
id | name | coordinates (longitude, latitude)
1 | London | -0.12574, 51.50853
2 | Manchester | -2.25, 53.41667
3 | Glasgow | -4.25, 55.86667
Run Code Online (Sandbox Code Playgroud)
该coordinates列是点数据类型。我place使用以下方法将点插入表中:
st_geomfromtext('point($longitude $latitude)', 4326)
Run Code Online (Sandbox Code Playgroud)
请注意,我使用了 SRID。
给定任何坐标,我想找到离它最近的地方(按升序排列)。我目前提出的解决方案(通过阅读 MySQL 文档)如下所示:
select
*,
st_distance_sphere(`place`.`coordinates`, st_geomfromtext('Point($longitude $latitude)', 4326)) as distance
from place
order by distance asc;
Run Code Online (Sandbox Code Playgroud)
在查看了此处和其他地方的无数类似问题后,很明显这是一种鲜为人知(和较新的方式)的做事方式,因此没有太多内容,因此我要寻求一些澄清。
我的问题是:
coordinates列上的空间索引吗?编辑,这里是这些答案:
explain select ...; 返回:
id | select_type | table | partitions | …Run Code Online (Sandbox Code Playgroud) 我有一个包含 150 万行、39 列的表,包含大约 2 年的销售数据,并且每天都在增长。在我们将其移动到新服务器之前我没有遇到任何问题,我们现在的内存可能更少。
目前查询需要很长时间。有人建议对导致大多数性能问题的大表进行分区,但我有几个问题。
分区执行时间是否较长?我担心由于性能缓慢,中途会发生一些事情,我会丢失数据。
我应该把它分成几年还是几个月?(我们通常会查看一个月内的数字,但有时我们会花几周或几年的时间)。我还应该对列进行分区吗?(我们有一些很少或从不使用的列,但我们稍后可能想使用它们)
mysql ×10
performance ×2
php ×2
sql ×2
algorithm ×1
arabic ×1
convert-tz ×1
database ×1
dateadd ×1
diacritics ×1
doctrine ×1
doctrine-orm ×1
eloquent ×1
freeradius ×1
geospatial ×1
indexing ×1
laravel ×1
myisam ×1
mysql-8.0 ×1
partitioning ×1
timezone ×1
tree ×1
vb.net ×1