[mysql] 外鍵 Foreign Key 速查

當關聯父資料表的主鍵紀錄行被刪除或修改時,InnoDB 對子資料表中紀錄行的處理方式:
CASCADE – 會將有所關聯的紀錄行也會進行刪除或修改。
SET NULL –
會將有所關聯的紀錄行設定成 NULL
NO ACTION –
有存在的關聯紀錄行時,會禁止父資料表的刪除或修改動作。
RESTRICT –
 NO ACTION 相同。[……]

閱讀更多

MIS WAMP手動安裝及設定教學 Apache2.4 + PHP7 for windows10

手動安裝 Apache2.4 + PHP7 for windows10

首先,我該選x64或x86安裝呢?

何謂 x64 和 x86,可閱讀下方網址文章,本篇不多做解釋
x86和x64到底有什麼差異?

注意 !!!

若安裝x64版本,PHP & Apache 都需要選擇x64版本,反之亦然

安裝 PHP7 for windows

PHP For Windows 官網

http://windows.php.net/

PHP For Windows 歷史版本 (官網)

本例下載 PHP 7.0 VC14 x64 Thread Safe

解壓縮至 PHP 的存放目錄
本例解壓縮至 C:php-7.0.10-Win32-VC14-x64

# 設定 php.ini

PHP.ini 為PHP的設定檔
PHP安裝目錄中尚無 PHP.ini
但於安裝目錄中有下列2個檔案
php.ini-development 為開發環境用參考設定檔
php.ini-production    為正式環境用參考設定檔
本例複製 php.ini-development 更名為 php.ini 置於於PHP安裝目錄中
文字編輯器開啟 php.ini

以下為常用設定,視需求調整參數,至於設定內容就不於本篇討論

# 設定環境參數

short_open_tag = On
extension_dir = "c:/php-7.0.10-Win32-VC14-x64/ext"

# 設定延伸套件,把前方的「;」移除即可

extension=php_bz2.dll
extension=php_curl.dll
extension=php_gd2.dll
extension=php_mysqli.dll
extension=php_openssl.dll
儲存 php.ini

# 設定延伸套件

移動PHP目錄中的下列檔案至 C:Windowssystem32中
libssh2.dll, php_curl.dll, ssleay32.dll, libeay32.dll
移動PHP目錄中的下列檔案至apachebin中
libssh2.dll

安裝 Apache2.4 for windows

Apache for windows download
至 Apache Haus 下載 Apache 2.4.23

安裝 Apache2.4

本例下載 Apache 2.4.23 x64

httpd-2.4.23-x64-vc14.zip

解壓縮至 SERVER 的存放目錄

本例解壓縮至 C:AppServApache24

設定httpd.conf

httpd.conf 為 Apache的設定檔
先複製一份命名為 httpd.conf.bk 備份使用,以免改壞掉
文字編輯器開啟Apache安裝目錄中的  /conf/httpd.conf


# 設定環境參數

Define SRVROOT "C:/AppServ/Apache24"
Define DOCROOT "C:/AppServ/www" # 新增此行,網站根目錄
ServerRoot "${SRVROOT}"

注意!!!!!!!!!!
分隔路徑的斜線,要用「/」而不是 windows 檔案總管的「」

<Directory />
    AllowOverride All
    Require all denied
</Directory>

DocumentRoot "${DOCROOT}"
<Directory "${DOCROOT}">
   Options Indexes FollowSymLinks
   AllowOverride All
   Require all granted
</Directory>

於最下方加入下列文字,Apache連接PHP7

#BEGIN PHP INSTALLER EDITS - REMOVE ONLY ON UNINSTALL 
AddHandler application/x-httpd-php .php 
AddType application/x-httpd-php .php .html 
LoadModule php7_module "C:/php-7.0.10-Win32-VC14-x64/php7apache2_4.dll" 
PHPIniDir "C:/php-7.0.10-Win32-VC14-x64/" 
#END PHP INSTALLER EDITS - REMOVE ONLY ON UNINSTALL

「C:/php-7.0.10-Win32-VC14-x64/」為PHP安裝目錄

注意!!!!!!!!!!

分隔路徑的斜線,要用「/」而不是 windows 檔案總管的「」

所以是
「C:/php-7.0.10-Win32-VC14-x64/」

不是
「C:php-7.0.10-Win32-VC14-x64

儲存 httpd.conf

 

Apache安裝為 windows 服務,開機自動啟動

開啟 Win10 的 「命令提示字元(系統管理員)」

// 測試設定檔是否正確

C:AppServApache24binhttpd.exe -t

錯誤會跳錯誤訊息,正確會顯示syntax OK,接著安裝服務

C:Windowssystem32>C:AppServApache24binhttpd.exe -t
Syntax OK

// 安裝服務,反之解除安裝為 httpd.exe -k uninstall

C:AppServApache24binhttpd.exe -k install

測試是否正確運行

在網站根目錄C:/AppServ/www下建立一個index.php檔案

<?php phpinfo(); ?>

運行 http://127.0.0.1
看到下列畫面,代表安裝成功

呼~打完收工!![……]

閱讀更多

[SQL] MySQL to PostgreSQL 好痛轉移,SQL語法差異

換資料庫真的好機掰,會有一堆未知問題,見招拆招,紀錄於下

LIMIT OFFSET

/* MySQL */
SELECT * FROM abc WHERE status=1 ORDER BY create_time DESC LIMIT 0 , 10
/* PostgreSQL */
SELECT * FROM abc WHERE status=1 ORDER BY create_time DESC LIMIT 10 OFFSET 0

# UPDATE 不能加 ORDER BY and LIMIT
/* MySQL */
UPDATE abc SET aaa=1 WHERE id<=100 ORDER BY status DESC LIMIT 10

/* PostgreSQL */
/* 若有需求要用子句解決 */
UPDATE abc main SET aaa=1
FROM
 ( SELECT id FROM page_builder WHERE id<=100 ORDER BY status DESC LIMIT 10 ) sub
WHERE main.id = sub.id

PHP

//mysql 取新增的id
mysql_insert_id() mysqli_insert_id();
//PostgreSQL


$re = pg_query($conn, "INSERT INTO foo (bar) values (123);");
$re
= pg_query("SELECT lastval();");
$row
= pg_fetch_row($re);
$insert_id
= $row
[0];

[……]

閱讀更多

MySQL 判斷兩個時間區間是否重疊 Determine Whether Two Date Ranges Overlap

判斷兩個時間區間是否重疊



<?php

/* 判斷兩個時間區間是否重疊 */
/* that it is sufficient to say that the two ranges overlap */
WHERE (StartDate1 <= EndDate2) AND (StartDate2 <= EndDate1)

?>


http://stackoverflow.com/questions/325933/determine-whether-two-date-ranges-overlap[……]

閱讀更多

PHP SQL 篩選時間

需要用日期來篩選指定日期區間的資料,剛好看到艾倫郭寫的這一篇,用了BETWEEN我覺得還蠻好用的,此篇文章也寫了好幾種方式,十分受用~


若SQL Server裡的 table 裡有一個日期欄位,只會放日期,那麼您可以寫成
SELECT …. FROM xxx WHERE xxx=’2008/1/15′SELECT …. FROM xxx WHERE xxx BETWEEN ‘2008/1/15’ AND ‘2008/1/20’

若日期欄位有包含時間, 由於時間可能值為 2008/1/15 23:59:59.50 如果您想找 2008/1/15 這一天裡的所有記錄(不拘時間), 卻將篩選條件寫成
SELECT …. FROM xxx WHERE xxx=’2008/1/15′ –>會找不到符合的記錄
SELECT …. FROM xxx WHERE xxx BETWEEN ‘2008/1/15’ AND ‘2008/1/16’ –>會連 2008/1/16 的記錄也被找到
SELECT …. FROM xxx WHERE xxx >= ‘2008/1/15’ AND xxx<= ‘2008/1/15 23:59:59’ –>若記錄值是2008/1/15 23:59:59.50 ,會找不到
因此,可以寫成
SELECT …. FROM xxx WHERE xxx >= ‘2008/1/15’ AND xxx < ‘2008/1/16’
就沒什麼問題了

本文出自
http://www.allenkuo.com/EBook5/view.aspx?TreeNodeID=13&id=374
[……]

閱讀更多

MySQL WHERE 等於 NULL 問題,=NULL會找不到的解決方案

/* 找不到 */
SELECT * FROM news WHERE class = NULL

/* 找不到 */
SELECT * FROM news WHERE class IN ( 0 , 1 , NULL )

/* 要這樣寫 */
SELECT * FROM news WHERE class IS NULL[……]

閱讀更多

SQL GROUP BY SUBSTR 用分割字串來群組資料

有時候我們會用一定的規則來訂義產品編號
例如:

2014(年)+001(款號)+01(規格) = 
201400101(產品編號)
所以在列表中,其實我們是要顯示款列表,但不同規格其實還是同一款,大同小異,
此時我們會希望用款號來把相同款式的商品群組起來,秀一筆就好,GROUP BY可以搭配SUBSTR()來實現這效果,實際實作方式如下

product_id ( 產品編號欄 )
201400101
201400102
201400201
201400202
201400301
201400302
GROUP BY SUBSTR(product_id,5,3)

取出之產品編號 
201400101
201400201

201400301

參考
http://www.1keydata.com/tw/sql/sql-substring.html

[……]

閱讀更多

SQL 繁體中文參考手冊 – 非常詳細 – 學SQL必備 – 教學必備

SQL 誰記得那麼多用法呀,當然要有一本參考手冊呀,

不管新手、老手都需要這玩意兒,快加入書籤吧
http://webdesign.kerthis.com/sql/

[……]

閱讀更多