Vue&Php获取数据库数据
数据形式
如果不太熟悉,想要没有问题地将数据库中的数据递送到渲染层颇有挑战。用Php的fetch_all(1)方法实际上得到了一个关联数组的数组(此处1代表数组中的项是关联数组),利用json_encode()将关联数组转换为JSON字符串,得到了一个JSON字符串数组。
而前端的JavaScript的JSON.parse()方法支持将JSON字符串转为对象,也支持将JSON字符串数组转为对象数组,Vue就可以渲染了。
Read more
如果不太熟悉,想要没有问题地将数据库中的数据递送到渲染层颇有挑战。用Php的fetch_all(1)方法实际上得到了一个关联数组的数组(此处1代表数组中的项是关联数组),利用json_encode()将关联数组转换为JSON字符串,得到了一个JSON字符串数组。
而前端的JavaScript的JSON.parse()方法支持将JSON字符串转为对象,也支持将JSON字符串数组转为对象数组,Vue就可以渲染了。
select sno,cno,score from sc as sc1 where score<(select max(score) from sc as sc2 where sc2.sno=sc1.sno)如果直接执行“select max(score) from sc”,我们将会得到sc表中score最大的那一行记录,但我们把s1与s2做sno相等的等值连接,情况有所不同。sc1.sno在查询过程中是变化的,我们可以认为数据库遍历了sc,sc1.sno等于遍历中的某一项的值。因此,这段代码将显示除了sno对应的最高成绩外的所有成绩。
select count(*) from sc where exists(select * from c where c.cno=sc.cno and cname='数据库原理') go select count(*) from sc,c where (c.cno=sc.cno and cname='数据库原理')这两种查询得到的结果是相同的,我们可以认为exists仅仅用于表达嵌套子查询,增加了查询的可读性。
create table s1( sno varchar(10) not null,sname varchar(20),dept varchar(20),age int,sex char(4)) go insert into s1(sno,sname,dept,age,sex) select sno,sname,dept,age,sex from s有时候需要拷贝一份表,但我在网上查到了很多写法并不符合t-sql的语法,上面是可以使用的版本。我只找到了先按照表的结构新建表然后插入所有数据的办法。在sqlserver2017中可以正常运行,如果不能用,可能需要在末尾加where 1=1。
insert into s1(sno,sname,dept,age) values(125,'name','dept',16) go select * from s1一开始我用了insert into s1 values(125,’name’,’dept’,16)没有成功,好在及时悔悟,数据库管理系统并不能智能补缺。。。我们应该老老实实写上所有要加的属性。ps:default只在insert into起作用。
alter table sc add constraint fkey foreign key(cno) references c(cno)'注释:sc表中cno的取值仅限于c表中cno的取值A属性的取值范围是B属性已有取值的集合。或者说A中不同元素的集合属于B中不同元素的集合。
create proc calculate @n int '注释:@n int 是传入的参数,可以没有;create proc proc_name必须要有 as declare @sum int,@i int '注释:声明变量,sql中变量前都加@ set @i=0 '为变量赋值 set @sum=1 while @i<@n'支持循环语句 begin set @i=@i+1 set @sum=@sum*@i end print @sum 'ps:除了用set为变量赋值,也可以用select @variable= column_name from table_name where 条件执行函数只需要’exec proc_name’
快速排序算法,即一种递归地讲数组按一定大小标准分成两组,小的一组在前,大的一组排在后的算法。
有关快速排序算法的文章和图解,网络上已经很多了,但阅读理解起来可能稍有困难,接下来我们将看到更容易理解的快速排序算法。
示例:以数组的首位作为基准(pivot),将小于ta的数置于ta的左边,大于ta的数在右边,左边只有1个元素,排序完成,而右边有4个数,那么把这4个数作为新的要排序的(抽象的)数组,重复上面的过程,最终基准所在的(抽象的)数组只有基准一个元素(如下图第二排的“2”),排序完成。
快排过程中需要移动元素的位置,很大程度上决定了时间复杂度。如果一个数组由大到小排列,而选取首位(最大数)为基准,则每一个元素都需要移动,而每一次移动的过程:对n个元素,考虑一般情况,分割一次数组(即小的排左边的过程)比较和交换元素的次数和n有关(虽然有的时候不用交换,但一定会比较);而快排有一颗递归树,在数字比较随机,树比较均匀的情况下,树的高度近似logn,而树的每一层都有n个元素参与partition(数组分割成抽象数组后,多个抽象数组partition,因为partition的复杂度与n的一次方相关,在估测复杂度时,可以认为每一层都有n个元素参与一次partition),随机情况的复杂度即为n*logn。
最坏情况这棵树只沿着一颗子树延伸,树的高度为n,每一层仍有n个元素参与partition,复杂度为n*n。看一下数字从大到小排列的情况,例如100到1,首次partition会进行99次比较,最后一次partition进行1次比较,并且递归也会进行99次,从等差数列的公式也可以看出来它与n的平方相关。
#include <iostream> using namespace std; void QuickSort(int arr[],int start,int end){//递归的时候,start和end都相对于整个arr if(start>=end){return;} int temp=start;//保留start初始值 int pivot=arr[start];//以数组或分割后的抽象数组的第一个元素作为基准(pivot) for(int i=start+1;i<=end;i++){//遍历arr[start]右边的元素 if(arr[i]<pivot){//当arr[i]比基准小 arr[start]=arr[i];//小的元素放到基准所在的位置 for(int j=i;j>start;j--){//遍历arr[start]到arr[i],全体右移(arr[start]已经放了新的元素) arr[j]=arr[j-1];//右移 } arr[++start]=pivot;//由于start和i项交换,start+1项的值需要修正,完成交换后基准右移,所以start也要++ } }//完成了一次左右分组(排序) QuickSort(arr, temp, start-1);//对0号到start-1号元素排序,共有start个元素 QuickSort(arr, start+1, end);//对右边的元素排序 } int main(int argc, const char * argv[]) { int arr[]={3,4,2,7,5,8,6,1};//8个元素组成的的乱序数组 QuickSort(arr,0,7);//8个元素即0号到7号 for(int i=0;i<8;i++){ cout<<arr[i]<<endl; } return 0; }
#include <iostream> using namespace std; int Partition(int arr[],int &start,int &end){ int pos=start;//(pos-start)用来记录小于等于arr[start](基准)的数的个数,arr[start+1]到arr[pos]都小于基准 for(int i=start+1;i<=end;i++){//遍历基准以后的元素 if(arr[i]<arr[start]){//当某一项小于基准 if(arr[i]!=arr[++pos]){//如果任何一个大于基准的数后面所有元素中都没有小于x基准的数(即基准后的元素,前一部分全部小于基准,后一部分全部大于基准),则arr[i]==arr[pos],不需要交换;否则需要交换 swap(arr[i], arr[pos]); } } } swap(arr[start], arr[pos]);//基准的位置开始没有移动,现在把基准的位置交换到小于基准的抽象数组的最右端,实现对数组的分割 return pos; } void QuickSort(int arr[],int start,int end){//递归的时候,start和end都相对于整个arr if(start>=end){return;}//对应多种情况,pos可能等于start,pos-1为负,这种情况没有数小于基准,也不需要排序,对应start==end+1;pos等于start+1时,只有一个数比基准小,并且已经z位于基准左边,也不需要排序,对应start==end int pos=Partition(arr, start, end);//对数组或抽象数组按基准排列,基准左边的数小于基准,右边大于基准 QuickSort(arr, start, pos-1);//对0号到start-1号元素排序,共有start个元素 QuickSort(arr, pos+1, end);//对右边的元素排序 } int main(int argc, const char * argv[]) { int arr[]={3,4,2,7,5,8,6,1};//8个元素组成的的乱序数组 QuickSort(arr,0,7);//8个元素即0号到7号 for(int i=0;i<8;i++){ cout<<arr[i]<<endl; } return 0; }
待补充
参考资料:
1.《算法导论》第7章:快速排序
我的博客即将同步至腾讯云+社区,邀请大家一同入驻:https://cloud.tencent.com/developer/support-plan?invite_code=1q1xzkj9mydbq
我用搜索引擎找了很久用nobody身份运行程序的方法,因为我用aria2下载完成的文件目录权限是755,其他没有以root权限运行的程序无法访问。
有时mount的磁盘使用root操作时无权限,需要使用指定的用户如(nobody)执行,
su -m nobody -c "shellcommand"
su -m nobody -c ” rm -rf /var/www/http/www.oppo.cn/data/attachment/forum/201510/07/130152jvtchg3tzolhn80n*”
以下问题都很入门,自用?以为会整理很多的,果然写不下去了。
1.python编译时遇到syntax error或者与indent有关的错误。
出现如上提示的确是因为缩进出现了问题,但是在某些编辑器中(尤其是在线编辑器),看似对齐,实际上却没有对齐。因此,下一次遇到这类问题,应当把代码复制到另一个编辑器中,以便于检查。