我的程度不好請大家見諒 , 我想從專案下手會比較有動力 , 這樣比較知道我欠缺什麼 , 之前從頭開始學 , 學到一半就沒動力了
以下是我的需求 , 及我的程式想法 , 這樣的需求程式可以做到嗎 ?
有約 1000 個資料表如下要做搜尋排序 , 首先我設定排序規則 , 然後啟動排序
afc 與 afc1 順序規則是 ABCDEFGHIJKLMNOP.....
time 順序規則是 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 10 , 11 , 12....
以下是 mysql 資料表 , 我會將 excel 轉成 sql 資料表
要達成如下效果
第一個先設定搜尋 afc 與 afc1 LIKE '%AB%' 資料及 time 6 如下
$sql_query="SELECT * FROM user WHERE afc LIKE '%AB%' AND afc1 LIKE '%AB%' AND time LIKE '%6%'";
搜尋到後刪除資料表 , 以免往後重覆搜尋
$sql ="DELETE FROM user WHERE time="6;
afc1 搜尋到 AB 後 , 接下來下一個資料表 afc 欄位 , 要搜尋最靠近 AB 字母的是 AB 或是 CD 或是 EF , 時間則搜尋往上的最靠近的 7
我想到的判斷是用 SWITCH , 但這要先設定條件 $i=1 , 但我的條件很多 , 有 AB or CD or EF , 當符合才會取用 , 這樣要如何設定
<?php
$i='1'; // 要設定多個條件
switch ($i) {
case 0:
echo "變數是 0";
break;
case 1:
echo "變數是 1"; //這裡要執行 SQL 搜尋語法 $sql_query="SELECT * FROM user WHERE afc LIKE '%AB%' AND afc1 LIKE '%AB%' AND time LIKE '%6%'";
break;
case 2:
echo "變數是 2";
break;
}
?>
afc1 搜尋到 AB 後 , 接下來下一個要搜尋最靠近 AB 字母的是 AB 或是 CD 成為 afc , 時間則搜尋往上的最靠近的 7
以下經由判斷式自行產生 , 往後都由判斷式自行產生 , 直到 1000 個資料搜尋完畢
$sql_query="SELECT * FROM user WHERE address LIKE '%AB%' AND address1 LIKE '%CD%' AND time LIKE '7%'";
最後完成的排序類似下面
實際畫面類似這樣
找了很多資料 , 想到下面這樣寫 , 當然是不對 , 想不出來還可以怎麼寫
$time6='06';$time7='07';$time8='08';$time9='09';
$be1='AB';$sh2='CD';$ne3='EF';$so4='GH';$zs5='IJ';
if( $time6 < $time7 ) AND (afc LIKE $be1 or $sn2 or $ne3 or $so4) AND (afc1 LIKE $be1 or $sn2 or $ne3 or $so4){
echo '$re=$sql_query("SELECT * FROM user "WHERE address LIKE $be1 AND address1 LIKE $be1 AND time LIKE $time6");
}elseif ($time7 < $time8)AND (afc LIKE $be1 or $sn2 or $ne3 or $so4) AND (afc1 LIKE $be1 or $sn2 or $ne3 or $so4){
echo ' $re=$sql_query("SELECT * FROM user "WHERE address LIKE $be1 AND address1 LIKE $be1 AND time LIKE $time7");
}elseit ($time8 < $time9)AND (afc LIKE $be1 or $sn2 or $ne3 or $so4) AND (afc1 LIKE $be1 or $sn2 or $ne3 or $so4){
echo ' $re=$sql_query("SELECT * FROM user "WHERE address LIKE $be1 AND address1 LIKE $be1 AND time LIKE $time8");
}
最大的問題在於沒有花足夠的時間在個別的知識,以你這問題來說,首先不需要考慮php的部份,
只用SQL處理時,是否能達到你的需求,只有在SQL沒問題的時候,再確定php的邏輯是否正確,
最終才是與php銜接的部份,不要想把所有問題綁在一起解決,先把問題細化,再來詢問吧,
不花心力在基礎上,是新手最大的毛病,如果這點都不做,不管過多久都還是只會在原地打轉
謝謝你的回答 , 上面有人給我建議 , 但感覺不是我要的 , 原始貼圖太多 , 所以我貼在這比較清楚 , 你如果有空也幫我看看 , 謝謝 !
上面大大我講的不夠清楚 , 感覺 order by不是我要的 , 我用中文表格解釋應該會比較清楚
未排序前
A .以下以時間及水果為排序重點 , 先找符合的時間 TIME 再找水果 AFC與 AFC1
時間順位為 12345678
B . 時間為 : [1].0613 [2].0725 [3]. 0734 [4].0824 [5].0925 [6].0945 [7].1034 [8].1045
水果順位為 1234567812345678
C .水果為 : [1].蘋果 [2].荔枝 [3].葡萄 [4].鳳梨 [5].西瓜 [6].龍眼 [7].榴槤 [8].香蕉
排序方法如下 , 先找符合 TIME 再找 AFC 與 AFC1
1 . 最早0613有兩個 , 但 AFC 蘋果是第一順位 , 所以取上面第2列 , 成為排序好下面的第19列
2 . 而排序後的第19列的 AFC1 為蘋果 , 所以找蘋果的第一順位是蘋果自己本身或荔枝及葡萄 , 而時間 0725 有兩個 , 只有上圖第6列符合是蘋果 , 所以取上圖第6列為下圖第20列
3 . 下圖第20列 0725 的 AFC1是鳳梨 , 鳳梨的第一順位是鳳梨自己, 但上圖 AFC 沒有鳳梨 , 所以找下一位是西瓜 , 上圖 0824 有兩位取 AFC 有西瓜的第4列成為下面的 21 列
4 . 下面的 21 的 AFC1 葡萄的第一順位是葡萄自己 ,但上圖 AFC 沒有葡萄,所以找下一位是鳳梨 , 取上面 0945 的 AFC 鳳梨為下面第22列
5 . 下面22列AFC1為香蕉 , 香蕉下一位是蘋果 , 取1045 的 AFC 為蘋果成為下面第 23 列這樣就完成了
排序後
alex9453 這樣子問題就清楚、有條理多了,我有空的時候會幫你想想看。
暫時看下來有個小問題:
像是0613的第二個0613/吃鳳梨很養生/想吃西瓜好久了
排序後就消失了,這代表每個TIME
都只需要出現一次囉?
對,只能出現一次
SELECT *
FROM Table1
WHERE id NOT IN (
SELECT Table1.id
FROM Table1
JOIN Table1 as Table2 ON Table2.afc1 = Table1.afc
)
ORDER BY time ASC, afc DESC