찾다
백엔드 개발PHP 튜토리얼一个时间段内各地区数据和,发现重复地区不相加

有2个表
第一个表是f_city(字段:city_id和字段city_name)
第二个表是f_chengjiao(字段:id、city_id、area、taoshu、fang_time)
关联字段是city_id

我写的语句是

SELECT CONCAT(fc.city_name), SUM(fcj.area), SUM(fcj.taoshu) FROM f_chengjiao AS fcj LEFT JOIN f_city AS fc USING (city_id) WHERE ".$sql." GROUP BY fcj.fang_time ORDER BY fc.city_id

出来的结果是下图,重复的地区没有合并相加



回复讨论(解决方案)

分组是 GROUP BY  fcj.fang_time
很自然会是 重复的地区没有合并相加
因为相同 fc.city_name 可能具有不同的 fcj.fang_time 值(显然是个时间)

分组是 GROUP BY  fcj.fang_time
很自然会是 重复的地区没有合并相加
因为相同 fc.city_name 可能具有不同的 fcj.fang_time 值(显然是个时间)



谢谢提示,但是现在还有一个问题是在这个统计时间内,有的地区数据因为没有数据就没有添加数据要怎么在sql中让没有添加数据地区显示0呢?

f_chengjiao AS fcj LEFT JOIN f_city AS fc
改为
f_chengjiao AS fcj RIGHT JOIN f_city AS fc

f_city AS fc LEFT JOIN f_chengjiao AS fcj

谢谢提示,但是现在还有一个问题是在这个统计时间内,有的地区数据因为没有数据就没有添加数据要怎么在sql中让没有添加数据地区显示0呢?


那你得告诉数据库,你所有地区的名单! 就是要将你现在得到的结果集,根据地区这个字段,关联(left/right join)你所有的地区名单

f_chengjiao AS fcj LEFT JOIN f_city AS fc
改为
f_chengjiao AS fcj RIGHT JOIN f_city AS fc

f_city AS fc LEFT JOIN f_chengjiao AS fcj



还是不能显示出没有添加数据的地区为0的效果,和没修过前一样


谢谢提示,但是现在还有一个问题是在这个统计时间内,有的地区数据因为没有数据就没有添加数据要怎么在sql中让没有添加数据地区显示0呢?


那你得告诉数据库,你所有地区的名单! 就是要将你现在得到的结果集,根据地区这个字段,关联(left/right join)你所有的地区名单

所有的地区都存在第一个表是f_city(字段:city_id和字段city_name)中

你要按 city_name 分组

你要按 city_name 分组

是按city_name
SELECT CONCAT(fc.city_name), SUM(fcj.area), SUM(fcj.taoshu) FROM f_chengjiao AS fcj RIGHT JOIN f_city AS fc USING (city_id) WHERE ".$sql." GROUP BY fc.city_name ORDER BY fc.city_id

SELECT * FROM 地区表
left JOIN 统计表 ON 地区表.city_name = 统计表.city_name
GROUP BY 地区表.city_name

话说这个USING (city_id) 东西我不太懂和on有什么区别,所以没在你的sql上改!

SELECT * FROM 地区表
left JOIN 统计表 ON 地区表.city_name = 统计表.city_name
GROUP BY 地区表.city_name

话说这个USING (city_id) 东西我不太懂和on有什么区别,所以没在你的sql上改!



USING (city_id) 是表关联字段的简写

SELECT * FROM 地区表
left JOIN 统计表 ON  地区表.city_name = 统计表.city_name
GROUP BY 地区表.city_name

话说这个USING (city_id) 东西我不太懂和on有什么区别,所以没在你的sql上改!




city_name不是关联字段,这样搜索不到

city_name不是关联字段,这样搜索不到


你的数据表 的数据 是怎么知道 他属于  哪个城市的,  是用id 还是用 name? 就用那个字段做关联条件!


city_name不是关联字段,这样搜索不到


你的数据表 的数据 是怎么知道 他属于  哪个城市的,  是用id 还是用 name? 就用那个字段做关联条件!

用了,还是不能显示出 没有添加数据城市为0的效果,只会显示添加了数据的结果


我理解出来是这样的!你要的是这个效果吗?


我理解出来是这样的!你要的是这个效果吗?



抱歉回信息晚了,登录帐号的开了大写一直登录不上,帐号被锁定了。

你这里面还用的条件语句吗?不懂这个条件句的意思,能解释下吗
我试着用你写的方法修改了,由于里面要地区求和,用条件语句包裹后就报错了,还有一个问题是,表关联后你搜索城市名怎么不要带上表前缀

1.你这里面还用的条件语句吗?
  1)如果你的“条件语句”指的是where,在left join后面加就可以了
  2)如果你的"条件语句"指的是on后面的关系条件,看我12楼的回复,目的是要让数据表知道每条数据来自城市表的哪个城市。
2.地区求和
SELECT city_name,IF(toushu is NULL,0,sum(toushu))
FROM t_city
LEFT JOIN t_chengjiao on t_city.cid= t_chengjiao.cid
GROUP BY t_chengjiao.cid
3.表关联后你搜索城市名怎么不要带上表前缀?
  表与表关联之后,没有出现重复名字的字段,可以不加前缀。

1.你这里面还用的条件语句吗?
  1)如果你的“条件语句”指的是where,在left join后面加就可以了
  2)如果你的"条件语句"指的是on后面的关系条件,看我12楼的回复,目的是要让数据表知道每条数据来自城市表的哪个城市。
2.地区求和
SELECT city_name,IF(toushu is NULL,0,sum(toushu))
FROM t_city
LEFT JOIN t_chengjiao on t_city.cid= t_chengjiao.cid
GROUP BY t_chengjiao.cid
3.表关联后你搜索城市名怎么不要带上表前缀?
  表与表关联之后,没有出现重复名字的字段,可以不加前缀。




我说的条件句是IF(toushu is NULL,0,sum(toushu)),不懂。

我又修改了下,还是不能出来
SELECT CONCAT(fc.city_name), IF(fcj.area is NULL,0,SUM(fcj.area)), IF(fcj.taoshu is NULL,0,SUM(fcj.taoshu)) FROM f_city AS fc LEFT JOIN f_chengjiao AS fcj USING (city_id) WHERE ".$sql." GROUP BY fc.city_id ORDER BY fc.city_id



结果如下图(我预留了一个city_id=13的没有添加数据,但是没有显示出来)

你把数据导出来,我测试一下
你总不能让我按你的截图来构造数据表吧

你把数据导出来,我测试一下
你总不能让我按你的截图来构造数据表吧



-- phpMyAdmin SQL Dump-- version 3.5.1-- http://www.phpmyadmin.net---- 主机: localhost-- 生成日期: 2014 年 09 月 13 日 02:48-- 服务器版本: 5.5.24-log-- PHP 版本: 5.3.13SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO";SET time_zone = "+00:00";/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;/*!40101 SET NAMES utf8 */;---- 数据库: `fang01`---- ------------------------------------------------------------ 表的结构 `f_chengjiao`--CREATE TABLE IF NOT EXISTS `f_chengjiao` (  `id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,  `city_id` mediumint(8) NOT NULL,  `iszhu` char(1) NOT NULL DEFAULT '1' COMMENT '//住宅or非住宅,1是住宅',  `area` int(10) NOT NULL COMMENT '//面积',  `taoshu` int(10) NOT NULL COMMENT '//套数',  `fang_time` date NOT NULL COMMENT '//房地产信息网入库时间',  `os_time` datetime NOT NULL COMMENT '//入库电脑时间',  PRIMARY KEY (`id`)) ENGINE=InnoDB  DEFAULT CHARSET=utf8 AUTO_INCREMENT=14 ;---- 转存表中的数据 `f_chengjiao`--INSERT INTO `f_chengjiao` (`id`, `city_id`, `iszhu`, `area`, `taoshu`, `fang_time`, `os_time`) VALUES(1, 1, '1', 100, 200, '2014-09-01', '2014-09-01 00:00:00'),(2, 2, '1', 100, 200, '2014-09-01', '2014-09-01 00:00:00'),(3, 3, '1', 100, 200, '2014-09-01', '2014-09-01 00:00:00'),(4, 4, '1', 100, 200, '2014-09-01', '2014-09-01 00:00:00'),(5, 5, '1', 100, 200, '2014-09-01', '2014-09-01 00:00:00'),(6, 6, '1', 100, 200, '2014-09-01', '2014-09-01 00:00:00'),(7, 7, '1', 100, 200, '2014-09-01', '2014-09-01 00:00:00'),(8, 8, '1', 100, 200, '2014-09-01', '2014-09-01 00:00:00'),(9, 9, '1', 100, 200, '2014-09-01', '2014-09-01 00:00:00'),(10, 10, '1', 100, 200, '2014-09-01', '2014-09-01 00:00:00'),(11, 11, '1', 100, 200, '2014-09-01', '2014-09-01 00:00:00'),(12, 12, '1', 100, 200, '2014-09-01', '2014-09-01 00:00:00'),(13, 1, '1', 100, 200, '2014-09-08', '2014-09-01 00:00:00');-- ------------------------------------------------------------ 表的结构 `f_city`--CREATE TABLE IF NOT EXISTS `f_city` (  `city_id` mediumint(8) NOT NULL,  `city_name` varchar(10) NOT NULL,  PRIMARY KEY (`city_id`)) ENGINE=InnoDB DEFAULT CHARSET=utf8;---- 转存表中的数据 `f_city`--INSERT INTO `f_city` (`city_id`, `city_name`) VALUES(1, '南昌市'),(2, '东湖区'),(3, '西湖区'),(4, '青山湖区'),(5, '青云谱区'),(6, '湾里区'),(7, '经开区'),(8, '高新区'),(9, '红谷滩区'),(10, '桑海区'),(11, '英雄区'),(12, '南昌县'),(13, '新建县');/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;

检查你的where 语句

检查你的where 语句


where是一个时间段的选择
$sql = '';if($start_time && $end_time){    $sql = " fcj.fang_time >='".$start_time."' AND fcj.fang_time<='".$end_time."' ";}else if($start_time){        $sql = " fcj.fang_time ='".$start_time."' ";}else if($end_time){    $sql = " fcj.fang_time ='".$end_time."' ";}else{    $sql = " fcj.city_id='".$city."' ";}

SELECT city_name, sum(area) as `面积`,sum(taoshu) as `套数` FROM f_city left join f_chengjiao on f_city.city_id=f_chengjiao.city_id group by f_city.city_id

右链接也是一样的

SELECT city_name, sum(area) as `面积`,sum(taoshu) as `套数` FROM f_city left join f_chengjiao on f_city.city_id=f_chengjiao.city_id group by f_city.city_id



奇怪了,我在8楼写的那个语句和你的差不多,怎么就是不能出来,你能告诉我是那里错了吗?
SELECT CONCAT(fc.city_name), SUM(fcj.area), SUM(fcj.taoshu) FROM f_chengjiao AS fcj RIGHT JOIN f_city AS fc USING (city_id) WHERE ".$sql." GROUP BY fc.city_id ORDER BY fc.city_id

你先把你的where语句去掉先

你先把你的where语句去掉先



还真是where造成的,但是我把where去掉,我就不能选择查询在一个时间段内的结果了

不是说你不能加where  是你的where有问题  在php echo你的sql语句,放到mysql去检查~ 看看是哪里有问题!

那有什么可奇怪的?
f_chengjiao 表中并无 新建县 的数据,如果按时间段过滤,必然会把他过滤掉
如果还想保有全部的 city_name 则需要这样写

SELECT city_name, sum(area) as `面积`,sum(taoshu) as `套数` FROM f_city left join (select * from f_chengjiao where 条件) t on f_city.city_id=t.city_id group by f_city.city_id

那有什么可奇怪的?
f_chengjiao 表中并无 新建县 的数据,如果按时间段过滤,必然会把他过滤掉
如果还想保有全部的 city_name 则需要这样写

SELECT city_name, sum(area) as `面积`,sum(taoshu) as `套数` FROM f_city left join (select * from f_chengjiao where 条件) t on f_city.city_id=t.city_id group by f_city.city_id



我数据库中搜索了,并没有过滤掉,你看看

你那是什么条件表达式?

不是说你不能加where  是你的where有问题  在php echo你的sql语句,放到mysql去检查~ 看看是哪里有问题!



打印了一个时间段:
fcj.fang_time >='2014-09-01' AND fcj.fang_time<='2014-09-13' 

你那是什么条件表达式?



不是这样写的吗?只有这样写才能出来,不然你看下31楼,打印的条件是
fcj.fang_time >='2014-09-01' AND fcj.fang_time<='2014-09-13' 

那有什么可奇怪的?
f_chengjiao 表中并无 新建县 的数据,如果按时间段过滤,必然会把他过滤掉
如果还想保有全部的 city_name 则需要这样写

SELECT city_name, sum(area) as `面积`,sum(taoshu) as `套数` FROM f_city left join (select * from f_chengjiao where 条件) t on f_city.city_id=t.city_id group by f_city.city_id



这里怎么有一个t,干嘛用的,用了你的写法全部都出来了,没有搞懂你这么写(select * from f_chengjiao where 条件)的意思,这里搜索了全部的字段了和直接用f_chengjiao 的差别 没有弄懂

你不能理解
 select * from f_chengjiao where 条件
的含义???

1.这里怎么有一个t,干嘛用的
t 只是关联临时表的一个别名,没有特殊意义,你祛掉,他就会报错。
2.差别
  1)写法一,先关联后搜索,这样的话不满足条件的记录(新建县)就不会被显示出来。(要理解这句话很简单,你select * 出来看看,有些记录是不满足你的where条件的)
  2)写法二,先搜索(f_chengjiao)后关联,这样就不会影响到最后的结果数。

你不能理解
 select * from f_chengjiao where 条件
的含义???



含义我知道,但是where 为什么要先放到f_chengjiao中,而不是放到外面

1.这里怎么有一个t,干嘛用的
t 只是关联临时表的一个别名,没有特殊意义,你祛掉,他就会报错。
2.差别
  1)写法一,先关联后搜索,这样的话不满足条件的记录(新建县)就不会被显示出来。(要理解这句话很简单,你select * 出来看看,有些记录是不满足你的where条件的)
  2)写法二,先搜索(f_chengjiao)后关联,这样就不会影响到最后的结果数。


 
哦懂了,但是别名是要用as吗?

所有的 as 都是可以省略的

所有的 as 都是可以省略的



原来是这样的,我看书里面都是要求写上as,同时我还想问一个问题,就是按你的要求写,f_chengjiao表都搜索了2次了,效率会不会低了点,以后这块数据多了,要怎么简写下?

1、这是按你的要求,而不是我的要求
2、f_chengjiao表只搜索了1次,怎么是2次呢?

1、这是按你的要求,而不是我的要求
2、f_chengjiao表只搜索了1次,怎么是2次呢?



第一次搜索的city_name、area、taoshu是表f_chengjiao中的
第二次搜索了SELECT * FROM f_chengjiao,这不是2次吗?
성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
解读CRISP-ML(Q):机器学习生命周期流程解读CRISP-ML(Q):机器学习生命周期流程Apr 08, 2023 pm 01:21 PM

译者 | 布加迪审校 | 孙淑娟目前,没有用于构建和管理机器学习(ML)应用程序的标准实践。机器学习项目组织得不好,缺乏可重复性,而且从长远来看容易彻底失败。因此,我们需要一套流程来帮助自己在整个机器学习生命周期中保持质量、可持续性、稳健性和成本管理。图1. 机器学习开发生命周期流程使用质量保证方法开发机器学习应用程序的跨行业标准流程(CRISP-ML(Q))是CRISP-DM的升级版,以确保机器学习产品的质量。CRISP-ML(Q)有六个单独的阶段:1. 业务和数据理解2. 数据准备3. 模型

人工智能的环境成本和承诺人工智能的环境成本和承诺Apr 08, 2023 pm 04:31 PM

人工智能(AI)在流行文化和政治分析中经常以两种极端的形式出现。它要么代表着人类智慧与科技实力相结合的未来主义乌托邦的关键,要么是迈向反乌托邦式机器崛起的第一步。学者、企业家、甚至活动家在应用人工智能应对气候变化时都采用了同样的二元思维。科技行业对人工智能在创建一个新的技术乌托邦中所扮演的角色的单一关注,掩盖了人工智能可能加剧环境退化的方式,通常是直接伤害边缘人群的方式。为了在应对气候变化的过程中充分利用人工智能技术,同时承认其大量消耗能源,引领人工智能潮流的科技公司需要探索人工智能对环境影响的

找不到中文语音预训练模型?中文版 Wav2vec 2.0和HuBERT来了找不到中文语音预训练模型?中文版 Wav2vec 2.0和HuBERT来了Apr 08, 2023 pm 06:21 PM

Wav2vec 2.0 [1],HuBERT [2] 和 WavLM [3] 等语音预训练模型,通过在多达上万小时的无标注语音数据(如 Libri-light )上的自监督学习,显著提升了自动语音识别(Automatic Speech Recognition, ASR),语音合成(Text-to-speech, TTS)和语音转换(Voice Conversation,VC)等语音下游任务的性能。然而这些模型都没有公开的中文版本,不便于应用在中文语音研究场景。 WenetSpeech [4] 是

条形统计图用什么呈现数据条形统计图用什么呈现数据Jan 20, 2021 pm 03:31 PM

条形统计图用“直条”呈现数据。条形统计图是用一个单位长度表示一定的数量,根据数量的多少画成长短不同的直条,然后把这些直条按一定的顺序排列起来;从条形统计图中很容易看出各种数量的多少。条形统计图分为:单式条形统计图和复式条形统计图,前者只表示1个项目的数据,后者可以同时表示多个项目的数据。

自动驾驶车道线检测分类的虚拟-真实域适应方法自动驾驶车道线检测分类的虚拟-真实域适应方法Apr 08, 2023 pm 02:31 PM

arXiv论文“Sim-to-Real Domain Adaptation for Lane Detection and Classification in Autonomous Driving“,2022年5月,加拿大滑铁卢大学的工作。虽然自主驾驶的监督检测和分类框架需要大型标注数据集,但光照真实模拟环境生成的合成数据推动的无监督域适应(UDA,Unsupervised Domain Adaptation)方法则是低成本、耗时更少的解决方案。本文提出对抗性鉴别和生成(adversarial d

数据通信中的信道传输速率单位是bps,它表示什么数据通信中的信道传输速率单位是bps,它表示什么Jan 18, 2021 pm 02:58 PM

数据通信中的信道传输速率单位是bps,它表示“位/秒”或“比特/秒”,即数据传输速率在数值上等于每秒钟传输构成数据代码的二进制比特数,也称“比特率”。比特率表示单位时间内传送比特的数目,用于衡量数字信息的传送速度;根据每帧图像存储时所占的比特数和传输比特率,可以计算数字图像信息传输的速度。

steam如何更改地区steam如何更改地区Feb 24, 2024 pm 12:31 PM

steam中玩家能够更换很多的服务区,那么具体该如何更改地区呢?玩家们可以在个人资料里的点击地区,然后选择需要更改的地方,之后重启steam就能够更改了,这篇steam改地区方法介绍就能够告诉大家具体的方法,下面就是详细的介绍,赶紧来看看吧!《steam使用教程》steam如何更改地区答:在个人资料里的地区中修改具体方法:一、个人资料修改1、首先点击头像,然后选择查看我的个人资料。2、之后点击右边的编辑个人资料。3、下拉可以找到位置,选择需要修改的地区,点击保存,最后别忘了重新登录一下。二、客服

数据分析方法有哪几种数据分析方法有哪几种Dec 15, 2020 am 09:48 AM

数据分析方法有4种,分别是:1、趋势分析,趋势分析一般用于核心指标的长期跟踪;2、象限分析,可依据数据的不同,将各个比较主体划分到四个象限中;3、对比分析,分为横向对比和纵向对比;4、交叉分析,主要作用就是从多个维度细分数据。

See all articles

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover

AI Clothes Remover

사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

AI Hentai Generator

AI Hentai Generator

AI Hentai를 무료로 생성하십시오.

뜨거운 도구

SublimeText3 Mac 버전

SublimeText3 Mac 버전

신 수준의 코드 편집 소프트웨어(SublimeText3)

DVWA

DVWA

DVWA(Damn Vulnerable Web App)는 매우 취약한 PHP/MySQL 웹 애플리케이션입니다. 주요 목표는 보안 전문가가 법적 환경에서 자신의 기술과 도구를 테스트하고, 웹 개발자가 웹 응용 프로그램 보안 프로세스를 더 잘 이해할 수 있도록 돕고, 교사/학생이 교실 환경 웹 응용 프로그램에서 가르치고 배울 수 있도록 돕는 것입니다. 보안. DVWA의 목표는 다양한 난이도의 간단하고 간단한 인터페이스를 통해 가장 일반적인 웹 취약점 중 일부를 연습하는 것입니다. 이 소프트웨어는

SecList

SecList

SecLists는 최고의 보안 테스터의 동반자입니다. 보안 평가 시 자주 사용되는 다양한 유형의 목록을 한 곳에 모아 놓은 것입니다. SecLists는 보안 테스터에게 필요할 수 있는 모든 목록을 편리하게 제공하여 보안 테스트를 더욱 효율적이고 생산적으로 만드는 데 도움이 됩니다. 목록 유형에는 사용자 이름, 비밀번호, URL, 퍼징 페이로드, 민감한 데이터 패턴, 웹 셸 등이 포함됩니다. 테스터는 이 저장소를 새로운 테스트 시스템으로 간단히 가져올 수 있으며 필요한 모든 유형의 목록에 액세스할 수 있습니다.

Atom Editor Mac 버전 다운로드

Atom Editor Mac 버전 다운로드

가장 인기 있는 오픈 소스 편집기

ZendStudio 13.5.1 맥

ZendStudio 13.5.1 맥

강력한 PHP 통합 개발 환경