本文的目的是介绍请任何人帮助我在mysql查询中的情况的详细情况,特别关注请任何人帮助我在mysql查询中的情况怎么写的相关信息。我们将通过专业的研究、有关数据的分析等多种方式,为您呈现一个全面的了解
本文的目的是介绍请任何人帮助我在mysql查询中的情况的详细情况,特别关注请任何人帮助我在mysql查询中的情况怎么写的相关信息。我们将通过专业的研究、有关数据的分析等多种方式,为您呈现一个全面的了解请任何人帮助我在mysql查询中的情况的机会,同时也不会遗漏关于MySQL查询中的分页思路的优化_MySQL、mysql查询中的距离计算、OR WHERE和AND在MySQL查询中、php – 在mysql查询中SUM多个日期范围的知识。
本文目录一览:- 请任何人帮助我在mysql查询中的情况(请任何人帮助我在mysql查询中的情况怎么写)
- MySQL查询中的分页思路的优化_MySQL
- mysql查询中的距离计算
- OR WHERE和AND在MySQL查询中
- php – 在mysql查询中SUM多个日期范围
请任何人帮助我在mysql查询中的情况(请任何人帮助我在mysql查询中的情况怎么写)
我有这个数据。
+------+--------------+------------+
+ id + position_id + name +
+------+--------------+------------+
+ 1 + 1 + name_1 +
+ 2 + 5 + name_2 +
+ 3 + 2 + name_3 +
+ 4 + 2 + name_4 +
+ 5 + 2 + name_5 +
+ 6 + 3 + name_6 +
+ 7 + 4 + name_7 +
+ 8 + 3 + name_8 +
+ 9 + 2 + name_9 +
+------+--------------+------------+
..那我想要结果就像
+--------------+-----------+----------+----------+-----------+
+ position_id + result1 + result2 + result3 + result4 +
+--------------+-----------+----------+----------+-----------+
+ 1 + name_1 + @ + @ + @ +
+ 2 + name_3 + name_4 + name_5 + name_9 +
+ 3 + name_6 + name_8 + @ + @ +
+ 4 + name_7 + @ + @ + @ +
+ 5 + name_2 + @ + @ + @ +
+--------------+-----------+----------+----------+-----------+
我有一些结果数据的案例,这些数据是我的学校报告的。数据结果 必须是动态的,跟随位置的主要位置 ,如果结果 为空,则播种@ 。
有关更多数据或信息,您可以使用以下命令询问
MySQL查询中的分页思路的优化_MySQL
复杂条件搜索时,where somthing order by somefield+somefieldmysql会搜遍数据库,找出“所有”符合条件的记录,然后取出m,n条记录。如果你的数据量有几十万条,用户又搜索一些很通俗的词,然后要依次读最后几页重温旧梦。mysql该很悲壮的不停操作硬盘。
所以,可以试着让mysql也存储分页,当然要程序配合。
ASP的分页:在ASP系统中有Recordset对象来实现分页,但是大量数据放在内存中,而且不知道什么时候才失效(请ASP高手指点). SQL数据库分页:用存储过程+游标方式分页,具体实现原理不是很清楚,设想如果用一次查询就得到需要的结果,或者是id集,需要后续页时只要按照结果中的IDs读出相关记录。这样只要很小的空间保留本次查询的所有IDs. (SQL中的查询结果不知道怎样清楚过期垃圾?)
这样,可以让mysql模拟存储分页机制:1. select id from $table where $condition order by $field limit $max_pages*$count;查询符合条件的IDs.限定最大符合条件的记录数量,也可以不加。2. 因为php在执行结束后所有变量都要lost,所以可以考虑:方案a. 在mysql建立临时表,查询结果用一个时间或随机数作为唯一标志插入。其中建立page1~pagen个字段,每个字段保存该页中需要的ids, 这样一个id对一条记录.方案b. 如果打开session,也可以放在session中保存,实际上是放在文件中保存。建立一个$IDs数组,$IDs[1]~$IDs[$max_pages]. 考虑到有时候用户会开几个窗口同时查询,要为$ids做一个唯一标志,避免查询结果相互覆盖。二维数组和$$var都是好办法。3. 在每页页的请求中,直接找到对应的IDs,中间以","间隔:select * from $table where id in ($ids); 速度绝对快4. 收尾要考虑查询结果的自动清除,可以设置定时或者按比例随机清楚。如果用mysql临时表要加上一个时间标志字段,session中要加入$IDs["time"]=time(); 在一定时间以后不操作视为过期数据。
如果要优化,可以考虑用把1和2.a中的语句合并成select ...... into ....
Note:1.以上只是针对mysql的修补方案,希望mysql哪天能把这些功能加进去2.其它数据库也可以套用。3.如果其它数据库还有更先进的分页方式,请告诉我或mailto: steeven@kali.com.cn4.如果真的有很多数据要查询,还是和mysql再见吧,sql,oracle都提供了更先进的关键词索引查询。
mysql查询中的距离计算
我必须查询成千上万个条目的数据库,并按距指定点的距离对其进行排序。
问题是每个条目都有一个纬度和经度,我需要检索每个条目以计算其距离。对于大型数据库,我不想检索每一行,这可能需要一些时间。
有什么办法可以将其构建到mysql查询中,以便我只需要检索最近的15个条目。
例如
`SELECT events.id, caclDistance($latlng, events.location) AS distance FROM events ORDER BY distance LIMIT 0,15` function caclDistance($old, $new){ //Calculates the distance between $old and $new }
答案1
小编典典选项1:通过切换到支持GeoIP的数据库对数据库进行计算。
选项2:使用如下存储过程对数据库进行计算:
CREATE FUNCTION calcDistance (latA double, lonA double, latB double, LonB double) RETURNS double DETERMINISTICBEGIN SET @RlatA = radians(latA); SET @RlonA = radians(lonA); SET @RlatB = radians(latB); SET @RlonB = radians(LonB); SET @deltaLat = @RlatA - @RlatB; SET @deltaLon = @RlonA - @RlonB; SET @d = SIN(@deltaLat/2) * SIN(@deltaLat/2) + COS(@RlatA) * COS(@RlatB) * SIN(@deltaLon/2)*SIN(@deltaLon/2); RETURN 2 * ASIN(SQRT(@d)) * 6371.01;END//
如果您的数据库中有一个关于纬度和经度的索引,则可以通过计算PHP中的初始边界框($ minLat,$ maxLat,$ minLong和$
maxLong)并限制来减少需要计算的数量。根据该行($ minLat和$ maxLat之间的纬度以及$ minLong和$
maxLong之间的经度)将这些行添加到您的条目子集。然后,MySQL只需要为该行子集执行距离计算。
如果您只是使用存储过程来计算距离,则SQL仍然必须遍历数据库中的每个记录,并计算数据库中每个记录的距离,然后才能决定是返回该行还是丢弃该行。
由于计算的执行速度相对较慢,因此最好减少需要计算的行的集合,从而消除明显落在所需距离之外的行,因此我们仅对以下情况执行昂贵的计算:行数较少。
如果您认为自己所做的基本上是在地图上绘制一个以初始点为中心并具有一定距离半径的圆;那么该公式仅会确定哪些行属于该圆…但是它仍然必须检查每一行。
使用边界框就像先在地图上绘制一个正方形,然后将左,右,上和下边缘与我们的中心点保持适当的距离。然后,我们将在该框中绘制圆,使圆上的最北,最东,最南和最西点与框的边界接触。一些行将落在该框的外面,因此SQL甚至不必费心尝试计算这些行的距离。它仅计算落入边界框内的行的距离,以查看它们是否也落入圆内。
在您的PHP中(假设您正在使用$变量名运行PHP),我们可以使用一个非常简单的计算方法,根据我们的距离计算出最小和最大纬度和经度,然后在SQL的WHERE子句中设置这些值声明。这实际上是我们的盒子,落在盒子外面的任何东西都会自动丢弃,而无需实际计算其距离。
在Movable Type网站上对此有很好的解释(带有PHP代码),对于打算用PHP进行任何GeoPositioning工作的任何人来说,这都是必不可少的阅读材料。
编辑 calcDistance存储过程中的值6371.01是乘数,以公里为单位返回结果。如果您想得出英里,海里,米等的数值,请使用适当的替代乘数
OR WHERE和AND在MySQL查询中
基本上,我试图从基于两个不同组的SQL中获取数据,t.type
必须相等single
并且t.status
必须相等,1
但是至于t.org
我想要同时获得DUAL
和RA
,这是我尝试的无济于事。
SELECT
COUNT( p.tID )
FROM
ticket AS t
INNER JOIN
people AS p ON t.ID = p.tID
WHERE
t.type = 'single' AND t.status='1' AND t.org = 'RA' OR t.org = 'DUAL'
我很确定他们的方法可以使此查询正常工作,只是不在我脑海
php – 在mysql查询中SUM多个日期范围
我有一个MySql表’Products’有三列:
Date | Product | Qty
我的目标是每周提取每种产品的数量.
在两个给定日期之间获得SUM很容易:
SELECT SUM(qty) FROM products WHERE date >= '2010-01-01' AND date < '2011-01-1'
我可以使用以下内容生成PHP中的周列表:
$today = date('Y-m-d',strtotime('last week Monday'));
$future = date('Y-m-d',strtotime('+90 days'));
$period = new DatePeriod(
new DateTime($today),new DateInterval('P7D'),new DateTime($future)
);
foreach ($period as $key => $value) {
$dates .= $value->format('Y-m-d');
}
是否有按日期分组依据和SUM的MySQL查询?或者我会更好地在PHP中循环?
Year()
和Week()
函数来获取给定日期的年份和周数. Week()函数将返回从0到53的周数.因此,如果您的数据跨越多年,则需要使用Year()函数.>但是,您将更有兴趣了解相关周的开始日期和结束日期.这是我们可以使用非常有趣的函数
DayOfWeek()
.它返回给定日期的工作日索引(1 =星期日,2 =星期一,…,7 =星期六)>我们可以使用工作日指数值和实际日期值来使用
Date_Add()
函数,以确定给定日期的开始周日期和结束周日期.
尝试以下(如果周从星期日开始):
SELECT
DATE_ADD(`date`,INTERVAL(1 - DAYOFWEEK(`date`)) DAY) AS week_start_date,DATE_ADD(`date`,INTERVAL(7 - DAYOFWEEK(`date`)) DAY) AS week_end_date,SUM(qty)
FROM
products
GROUP BY week_start_date,week_end_date
如果周从星期一开始,另一个方便的功能是WeekDay()
.它返回日期的工作日索引(0 =星期一,1 =星期二,… 6 =星期日).
尝试以下(如果周从星期一开始):
SELECT
DATE_ADD(`date`,INTERVAL(0 - WEEKDAY(`date`)) DAY) AS week_start_date,INTERVAL(6 - WEEKDAY(`date`)) DAY) AS week_end_date,week_end_date
关于请任何人帮助我在mysql查询中的情况和请任何人帮助我在mysql查询中的情况怎么写的介绍现已完结,谢谢您的耐心阅读,如果想了解更多关于MySQL查询中的分页思路的优化_MySQL、mysql查询中的距离计算、OR WHERE和AND在MySQL查询中、php – 在mysql查询中SUM多个日期范围的相关知识,请在本站寻找。
本文标签: