跟大家分享一下MYSQL 語法 群組最新一筆資料如何取

跟大家分享一下MYSQL 語法 群組最新一筆資料如何取
〠▧▧▧▧▧▧▧▧▧▧▧▧▧▧▧▧▧▧▧▧▧▧▧▧▧▧▧▧▧▧▧▧▧▧▧▧▧▧▧▧▧▧▧▧▧▧▧▧
於多筆重複資料中取得該重複群組中最新一筆資料
〠▧▧▧▧▧▧▧▧▧▧▧▧▧▧▧▧▧▧▧▧▧▧▧▧▧▧▧▧▧▧▧▧▧▧▧▧▧▧▧▧▧▧▧▧▧▧▧▧
mySQL group by 默認取分組結果的第一條記錄
#有錯資料都是撈第1筆
SELECT `money_en`,`sell_price`,`buy_price`,`price`,`sub`,`datatype` FROM ( SELECT * FROM oc_money_price WHERE `money_en` =’ETH’ ORDER BY `datatype` DESC ) AS a GROUP BY `datatype`
#修正為-沒用
SELECT `money_en`,`sell_price`,`buy_price`,`price`,`sub`,`datatype` FROM ( SELECT * FROM oc_money_price WHERE `money_en` =’ETH’ ORDER BY `datatype`,`sno` DESC ) AS a GROUP BY `datatype`
#撈出資料還是不對,撈的事最日期最前的一筆oc_money_price
SELECT * FROM (SELECT * FROM `oc_money_price` ORDER BY `sno` DESC) `oc_money_price` GROUP BY datatype ORDER BY sno DESC 沒用-還是第1筆
#重新整理思緒
先搞到最大各類最大SNO號
select max(sno) as max_sno from oc_money_price group by datatype #這是對的
select `sell_price`,max(sno) as max_sno from oc_money_price group by datatype #但配對sell_price會錯
max_sno
5074
5068
5071
5076
——————————————-
#整理如下
select f.* from( select max(sno) as max_sno from oc_money_price group by datatype ) as x inner join oc_money_price as f on f.sno = x.max_sno ORDER BY f.datatype ASC
#但由於1家公司會有2種幣值所以要限制條件
select f.* from( select max(sno) as max_sno from oc_money_price WHERE `money_en` =’ETH’ group by datatype ) as x inner join oc_money_price as f on f.sno = x.max_sno ORDER BY f.datatype ASC
#註 這時候 ORDER BY f.datatype ASC 有沒有這個條件都不會提升速度
———————————————–
#員工最大產值的例子
———————————————–
pid:員工代碼
pyear:年度
pvalue:年度產值
 
SELECT a.pid,a.pyear,MAX(a.pvalue)
FROM mytable a JOIN
(SELECT pid, pvalue = MAX(pvalue)
FROM mytable GROUP BY pid) AS b ON
a.pid= b.pid AND a.pvalue= b.pvalue
GROUP BY a.pid,a.pyear
———————————————-

opencart 你會想關閉的功能 運費試算 購物禮券

==================================
20170919 你會想關閉的功能
==================================
移除checkout/cart 結帳頁面 “購物禮券”功能
移除checkout/cart 結帳頁面 運費試算 功能

移除checkout/cart 結帳頁面 “購物禮券”功能
後台=>模組=>訂單計算模組=>購物禮券 點編輯=>狀態改成關閉
移除checkout/cart 結帳頁面 運費試算 功能
後台=>模組=>訂單計算模組=>運費 點編輯=>運費估價 狀態改成停用

即時匯率換算系統的實作-帶入金額-及時換算匯率-的程式

#即時匯率換算系統的實作
帶入金額-及時換算匯率-的程式
===
我今天試用hackmd線上協作筆記本, 原創發表了一篇討論文 #即時匯率換算系統的實作 有興趣的朋友 歡迎共筆 https://hackmd.io/s/rJNm8WSFb

 

#即時匯率換算系統的實作
帶入金額-及時換算匯率-的程式

###帶入金額-和貨幣代碼 轉換成顯示出含貨幣前置符號的金額

D:\wamp\www\o03\system\library\cart\currency.php 這支

$this->currency->format($result['tax'], $this->config->get('config_currency')),//帶入金額-和貨幣代碼 轉換成顯示出含貨幣前置符號的金額
$this->currency->format(金額, 貨幣代碼一般是TWD) 	//帶入金額-轉換成顯示出含貨幣前置符號的金額
	//$this->currency->format(金額, 貨幣代碼一般是TWD,匯率=不輸入就是用資料庫的,是否不顯示貨幣符號)
currency

使用Yahoo API 抓取即時匯率

http://myskilltree.blogspot.tw/2016/03/yahoo-api.html

您可以在 http://www.xe.com/iso4217.php 找到完整的 ISO 貨幣代碼及設定。

http://download.finance.yahoo.com/d/quotes.csv?e=.csv&f=c4l1&s=TWDUSD=x,TWDJPY=x  2總幣的兌換比例
http://download.finance.yahoo.com/d/quotes.csv?e=.json&f=c4l1&s=TWDUSD=x,TWDJPY=x

其中URL裡的f=c4l1是只取下兌換幣別(美金)的代碼與匯率
如果想取下更詳細的資料可以換成f=sl1d1t1,分別指定了代碼(含原始幣別跟對換幣別)、匯率、日期、時間這四個欄位

而s=TWDUSD=x ,其中TWD (新台幣) 為原始幣別 USD (美金)為兌換幣別,可以依需求自行更換,如果要查詢多筆資料則在後在後接續即可。

後台一天抓一次匯率的程式

D:\wamp\www\o03\admin\controller\common\dashboard.php

// Run currency update
if ($this->config->get('config_currency_auto')) {
    $this->load->model('localisation/currency');

    $this->model_localisation_currency->refresh(false);//執行後台一天抓一次匯率的程式
}
 

D:\wamp\www\o03\admin\model\localisation\currency.php

	//抓取匯率資料-入資料庫 參數=false 是自己國家以外,更新資料抓取時間大於1天的 ,參數=true自己國家以外資料全更新
	public function refresh($force = false) {
		$data = array();

		if ($force) {
			$query = $this->db->query("SELECT * FROM " . DB_PREFIX . "currency WHERE code != '" . $this->db->escape($this->config->get('config_currency')) . "'");
		} else {
			//SELECT * FROM oc_currency WHERE code != 'TWD' AND date_modified < '2017-08-30 14:20:18' 自己國家以外,更新資料抓取時間大於1天的
			$query = $this->db->query("SELECT * FROM " . DB_PREFIX . "currency WHERE code != '" . $this->db->escape($this->config->get('config_currency')) . "' AND date_modified < '" .  $this->db->escape(date('Y-m-d H:i:s', strtotime('-1 day'))) . "'");
		}
		//組合文字把貨幣代碼加上=X
		foreach ($query->rows as $result) {
			$data[] = $this->config->get('config_currency') . $result['code'] . '=X';
		}
		$url='http://download.finance.yahoo.com/d/quotes.csv?s=' . implode(',', $data) . '&f=sl1&e=.csv';

		//去線上抓取資料
		$curl = curl_init();

		curl_setopt($curl, CURLOPT_URL,$url);
		curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
		curl_setopt($curl, CURLOPT_HEADER, false);
		curl_setopt($curl, CURLOPT_CONNECTTIMEOUT, 30);
		curl_setopt($curl, CURLOPT_TIMEOUT, 30);

		$content = curl_exec($curl);
		curl_close($curl);
		/*
		送出去的網址
			http://download.finance.yahoo.com/d/quotes.csv?s=TWDCNY=X,TWDHKD=X,TWDGBP=X,TWDUSD=X,TWDEUR=X&f=sl1&e=.csv"TWDCNY=X",0.2180
		抓回來資料
			"TWDHKD=X",0.2587
			"TWDGBP=X",0.0256
			"TWDUSD=X",0.0331
			"TWDEUR=X",0.0279
		echo $url,"<br>\n";print($content);	
		*/
		$lines = explode("\n", trim($content));
		/*把抓回來的資料處理*/
		foreach ($lines as $line) {
			$currency = utf8_substr($line, 4, 3);
			$value = utf8_substr($line, 11, 6);//匯率
			//更新全部匯率
			if ((float)$value) {
				$this->db->query("UPDATE " . DB_PREFIX . "currency SET value = '" . (float)$value . "', date_modified = '" .  $this->db->escape(date('Y-m-d H:i:s')) . "' WHERE code = '" . $this->db->escape($currency) . "'");
			}
		}
		//更新我國匯率為1.00000
		$this->db->query("UPDATE " . DB_PREFIX . "currency SET value = '1.00000', date_modified = '" .  $this->db->escape(date('Y-m-d H:i:s')) . "' WHERE code = '" . $this->db->escape($this->config->get('config_currency')) . "'");

		$this->cache->delete('currency');//刪除緩存檔案
	}
 

SELECT * FROM oc_currency WHERE code != ‘TWD’ AND date_modified < ‘2017-08-30 14:20:18’


#OPENCART 3.0 的匯率系統

1.它用curl抓取了yahoo的關於匯率的數據,
D:\wamp\www\o06\admin\model\localisation\currency.php 這只有首頁 才會讀取

	$curl = curl_init();
	//就是這裡了,看到木有
	curl_setopt($curl, CURLOPT_URL, 'http://download.finance.yahoo.com/d/quotes.csv?s=' . implode(',', $currency_data) . '&f=sl1&e=.json');
	curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);

它用curl抓取了yahoo的關於匯率的數據,結合這2段代碼可以看出,其實它的功能就是打開這個頁面的時候自動更新數據庫中匯率數據。
到此問題找到原因了,那麼解決的方法總結一下:
可以關閉自動更新匯率(Dashboard>System>Setting>Your Store>edit>local>Auto Update Currency 選擇No)
系統管理=>商店管理.編輯=>本地化設定=>匯率自動更新
系統管理=>在地化管理=>幣別管理


-----------------------------------------------
詳細實驗
送出值是先抓SELECT * FROM `oc_currency` 的資料
-----------------------------------------------

Array
(
    [0] => TWDCNY=X
    [1] => CNYTWD=X
    [2] => TWDHKD=X
    [3] => HKDTWD=X
    [4] => TWDGBP=X
    [5] => GBPTWD=X
    [6] => TWDUSD=X
    [7] => USDTWD=X
    [8] => TWDEUR=X
    [9] => EURTWD=X
)
http://download.finance.yahoo.com/d/quotes.csv?s=&f=sl1&e=.json	目標 結果抓一個空值
http://download.finance.yahoo.com/d/quotes.csv?s=TWDCNY=X,CNYTWD=X,TWDHKD=X,HKDTWD=X,TWDGBP=X,GBPTWD=X,TWDUSD=X,USDTWD=X,TWDEUR=X,EURTWD=X&f=sl1&e=.json 正常抓資料
結論:慢的原因不是這個-這一天只會抓一次而且只在你登入後台首頁時抓

帶入金額-及時換算匯率-的程式

D:\wamp\www\o03\system\library\cart\currency.php 是這支

<?php
namespace Cart;
class Currency {
	private $currencies = array();

	public function __construct($registry) {
		$this->db = $registry->get('db');
		$this->language = $registry->get('language');

		$query = $this->db->query("SELECT * FROM " . DB_PREFIX . "currency");//資料庫查出數據

		foreach ($query->rows as $result) {
			$this->currencies[$result['code']] = array(
				'currency_id'   => $result['currency_id'],//貨幣代號
				'title'         => $result['title'],//貨幣名稱
				'symbol_left'   => $result['symbol_left'],//貨幣符號金額左邊顯示(eg:$32、¥45、)
				'symbol_right'  => $result['symbol_right'],//貨幣符號金額右邊顯示
				'decimal_place' => $result['decimal_place'],//保留小數點後幾位有效數字
				'value'         => $result['value']//匯率
			);
		}
	}
	//帶入金額-轉換成顯示出含貨幣前置符號的金額$this->currency->format(金額, 貨幣代碼一般是TWD)
	//$this->currency->format(金額, 貨幣代碼一般是TWD,匯率=不輸入就是用資料庫的,是否不顯示貨幣符號)
	public function format($number, $currency, $value = '', $format = true) {
		$symbol_left = $this->currencies[$currency]['symbol_left'];
		$symbol_right = $this->currencies[$currency]['symbol_right'];
		$decimal_place = $this->currencies[$currency]['decimal_place'];

		if (!$value) {
			$value = $this->currencies[$currency]['value'];
		}
		//金額浮點數*匯率
		$amount = $value ? (float)$number * $value : (float)$number;
		
		$amount = round($amount, (int)$decimal_place);//金額取到小數幾位
		//是否不顯示貨幣符號
		if (!$format) {
			return $amount;
		}
		//以下顯示貨幣符號
		$string = '';

		if ($symbol_left) {
			$string .= $symbol_left;
		}
        //千進位加標點函式
		$string .= number_format($amount, (int)$decimal_place, $this->language->get('decimal_point'), $this->language->get('thousand_point'));

		if ($symbol_right) {
			$string .= $symbol_right;
		}

		return $string;//返回有貨幣符號的金額
	}

	public function convert($value, $from, $to) {
		if (isset($this->currencies[$from])) {
			$from = $this->currencies[$from]['value'];
		} else {
			$from = 1;
		}

		if (isset($this->currencies[$to])) {
			$to = $this->currencies[$to]['value'];
		} else {
			$to = 1;
		}

		return $value * ($to / $from);
	}
	//返回貨幣代號
	public function getId($currency) {
		if (isset($this->currencies[$currency])) {
			return $this->currencies[$currency]['currency_id'];
		} else {
			return 0;
		}
	}
	//返回貨幣符號
	public function getSymbolLeft($currency) {
		if (isset($this->currencies[$currency])) {
			return $this->currencies[$currency]['symbol_left'];
		} else {
			return '';
		}
	}

	public function getSymbolRight($currency) {
		if (isset($this->currencies[$currency])) {
			return $this->currencies[$currency]['symbol_right'];
		} else {
			return '';
		}
	}

	public function getDecimalPlace($currency) {
		if (isset($this->currencies[$currency])) {
			return $this->currencies[$currency]['decimal_place'];
		} else {
			return 0;
		}
	}

	public function getValue($currency) {
		if (isset($this->currencies[$currency])) {
			return $this->currencies[$currency]['value'];
		} else {
			return 0;
		}
	}
	//返回貨幣資料
	public function has($currency) {
		return isset($this->currencies[$currency]);
	}
}

 

 

智付寶Pay2go後台退款模組退款功能

程式開發日誌-兼碼農打廣告
2017/08/25 耗時1周測試3天,開發完成
—————————————-
#智付寶Pay2go_後台退款模組退款功能
退款功能-詳細說明
—————————————-
原版OPENCART-的退換貨單列表-其實只是個留言板功能,完全不會觸發真的信用卡退款
添加-PAY2GO 信用卡刷卡-退款功能
1.可-全額退款
2.可-部分退款(退款金額由商家自行輸入)
3.部分退款-之執行2次,3次,成立
4.連線至PAY2GO查詢訂單退款狀態功能
5.退款完成時,修改訂單狀態為退款,並增加1筆退款紀錄-
於顯示-訂單列表-增加此功能
於顯示-退換貨單列表-增加此功能
(交易金額100元,第1次退10元,第2次退20元這方法也是成立,但上筆退款狀態未處理完成時,送出下一筆無效)
經測試退款狀態由1變3要等到隔天早上10:00
退款狀態依不同情況,設定值代表下列意含
0=未退款
1=等待提送退款至收單機構
2=退款處理中
3=退款完成
—————————————-
#碼農自介
—————————————-
貧民出身,是臺灣該國中一小撮研究開源購物車
OPENCART和投票系統的人物,如果您需要中文化,破解插件,或修改客製化,除原作者外全臺灣你找不到比我會修改的人才
歡迎了解詳情網址http://blog.bkk.tw

無論你怎樣都改不掉後台下方版權訊息-因為根本不在程式中

———————————————————————————-

#如何改掉 OPENCART 下方版權訊息

—————————————–

D:\wamp\www\o03\admin\view\template\common\login.tpl <?php //echo $footer; ?>或修改D:\wamp\www\o03\admin\view\template\common\footer.tpl <footer id=”footer”> <br /></footer></div><!–/#container這個ID有強制最小高度–>但他還是會變多<footer id=”footer”> <br><p><a href=”http://www.opencart.idv.tw” target=”_blank” style=”color:#B4CD3C;”>OpenCart中文版</a></p></footer>

 

好樣的版權訊息不在任何程式中,而是在JS中

common.js

$(“#footer”).append(‘\x3c\x70\x3e\x3c\x61\x20\x68\x72\x65\x66\x3d\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\x6f\x70\x65\x6e\x63\x61\x72\x74\x2e\x69\x64\x76\x2e\x74\x77\x22\x20\x74\x61\x72\x67\x65\x74\x3d\x22\x5f\x62\x6c\x61\x6e\x6b\x22\x20\x73\x74\x79\x6c\x65\x3d\x22\x63\x6f\x6c\x6f\x72\x3a\x23\x42\x34\x43\x44\x33\x43\x3b\x22\x3e\x4f\x70\x65\x6e\x43\x61\x72\x74\u4e2d\u6587\u7248\x3c\x2f\x61\x3e\x3c\x2f\x70\x3e’);

我查了過了主程式,VIEW檔,翻譯檔和資料庫都沒有-要不是我是全端 那我還真會找到放棄。

然後你把這行加個註解-就可以沒有版權訊息了

//$(“#footer”).append(‘\x3c\x70\x3e\x3c\x61\x20\x68\x72\x65\x66\x3d\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\x6f\x70\x65\x6e\x63\x61\x72\x74\x2e\x69\x64\x76\x2e\x74\x77\x22\x20\x74\x61\x72\x67\x65\x74\x3d\x22\x5f\x62\x6c\x61\x6e\x6b\x22\x20\x73\x74\x79\x6c\x65\x3d\x22\x63\x6f\x6c\x6f\x72\x3a\x23\x42\x34\x43\x44\x33\x43\x3b\x22\x3e\x4f\x70\x65\x6e\x43\x61\x72\x74\u4e2d\u6587\u7248\x3c\x2f\x61\x3e\x3c\x2f\x70\x3e’);

商品放入購物車時閃爍數字效果

頁頭購物車有商品加入時,例如我已買了2個商品,購物車圖案就會顯示一個醒目的數字2

作法

—————————————-
#OPENCART 2.3 商品放入購物車時閃爍數字效果
—————————————-
D:\wamp\www\o03\catalog\controller\checkout\cart.php 只有增加時才提示
394行 $json[‘vou’] = $this->cart->countProducts();//自加商品數量

common.js 4個地方
$(‘#cart > button’).html(‘<span id=”cart-total”><i class=”fa fa-shopping-cart”></i> ‘ + json[‘total’] + ‘</span>’);
$(‘#cart > button’).html(‘<span id=”cart-total”><i class=”fa fa-shopping-cart”></i><span class=”blink badge2 badge-red rounded-x”>’ + json[‘vou’] + ‘</span> ‘ + json[‘total’] + ‘</span>’);

CSS
/*購物車閃爍效果*/
span.badge2 {
min-width: 10px;
padding: 3px 7px;
font-size: 12px;
font-weight: 700;
line-height: 1;
color: #fff;
text-align: center;
white-space: nowrap;
vertical-align: middle;
}
span.badge2 {
top: -5px;
left: -15px;
position: absolute;
}
span.badge-red {background: #e74c3c;}
.rounded-x {border-radius: 50% !important;}
/*閃爍動畫*/
.blink {
animation-duration: 1s;
animation-name: blink;
animation-iteration-count: infinite;
animation-direction: alternate;
animation-timing-function: ease-in-out;
}
@-o-keyframes blink
{
0% {opacity: 1}
50% {opacity: 0.3}
100% {opacity: 1}
}
@-ms-keyframes blink
{
0% {opacity: 1}
50% {opacity: 0.3}
100% {opacity: 1}
}
@-moz-keyframes blink
{
0% {opacity: 1}
50% {opacity: 0.3}
100% {opacity: 1}
}
@-webkit-keyframes blink
{
0% {opacity: 1}
50% {opacity: 0.3}
100% {opacity: 1}
}

我們工程師群,有人整理出-大家推薦參考配色的網站

我們工程師群,有人整理出-大家推薦參考配色的網站,
我把連結整理出來,提供大家參考.
material design colors
http://www.designskilz.com/colors/
日式色系
http://nipponcolors.com/#kamenozoki
colorhexa(相似度顏色)
http://www.colorhexa.com/
colorhunt(多組配色參考)
http://colorhunt.co/
colorme(單一顏色調配)
https://colorme.io/
cirs.cc
http://clrs.cc/
webcolourdata(多組配色參考)
http://webcolourdata.com/
colordrop(多組配色參考)
https://colordrop.io/
design-seeds(從圖片看配色系)
https://www.design-seeds.com/
palettable (推薦配色)
http://www.palettable.io/B8B063
grabient(漸層)
https://www.grabient.com/
webgradients(漸層)
https://webgradients.com/
colorlisa(多種風格配色)
http://www.colorlisa.com/
顏色轉換碼
https://www.ifreesite.com/color/color-code-converter.htm
色碼錶(轉換)
https://issisi.wordpress.com/…/%E8%89%B2%E7%A2%BC%E8%A1%A8…/

密碼要包含大小寫字母+數字+符號,提這個建議的人承認他錯了

密碼要包含大小寫字母+數字+符號,提這個建議的人剛剛承認他錯了

孟小白 ‧ 22小時前 ‧ 海外創投
這則趣聞是一堂產品經理課,產品越簡單越好。因為如果複雜的話,你不會知道客戶將會怎麼使用它;即便知道,可能是13年之後了。
密码要包含大小写字母+数字+符号,提这个建议的人刚刚承认他错了

Bill Burr在2003年為美國政府工作時,寫下了密碼安全領域的「聖經「:使用大寫字母、數字和非字母符號,原因是,複雜的密碼難以被猜到;另外,Burr也建議經常更換密碼。

所以,Burr是下列事情的始作俑者:迫使我們想出「Wohao5huA!」或者「P@55w0rd」這樣折磨打字人的密碼;迫使我們記住像「Uj3k@u90」這樣的系統分配密碼;根據公司IT部門的要求,90天,更換一次密碼。

現在,Burr承認,他的建議是錯的,這些辦法實際上不能提高密碼的安全性。相反,這些密碼組合會讓電腦系統更容易受到攻擊,因為用戶在創造了一個複雜密碼之後,會重複使用這些密碼,或者為了防止遺忘,會寫下來貼到電腦旁邊。而且,數字和符號的加入並沒有讓電腦更加免疫於黑客嘗試所有組合可能性的「強力(brute force)」攻擊。

定期更換密碼的建議也是錯誤的。因為密碼複雜,所以用戶只會更換其中一個字母或數字,例如把「Wohao5huA!」改成「Wohao5huA?」。這種更改對阻止黑客來說毫無意義。而且,定期更改密碼引起的不便比有限的密碼安全更糟糕。

現在,美國國家科學技術研究所的線上密碼指南已經更新,並提醒用戶避免傳統誤區:

l  不要重複使用密碼

l  結合大小寫字母設置的密碼沒有你想像的安全,沒有太大意義

l  更好的選擇是那些長但是易記的密碼,或者密碼短語:「yinglianxunguimo(營練訓鬼魔)」比「Wohao5huA!」這個密碼難破解的多。

l  另外,更安全的辦法是,使用雙重驗證,在登陸的時候最好得到短信的確認。

數億人在過去10多年間遵循了這個看似有道理的密碼原則,但是卻沒有考慮到行為因素的疊加。我從沒意識到密碼安全包括了密碼本身的安全,還有我們對待密碼的態度和使用方式。對於產品經理來說,這個經驗很重要:如果產品不夠簡單,那麼用戶可能根本不會按照預想的方式使用這個產品。

複雜的密碼本身有助於提高密碼安全性,但是複雜密碼導致的用戶習慣可能會讓賬戶變得更加不安全。Burr承認自己的建議錯了,並不是技術上認為複雜密碼不對,而更多是在用戶使用層面上的反思。

只是,對於普通用戶來說,我會想生活中還有多少我們完全不懂為什麼但是還依然遵照的原則。