id title cat lang
6101 AAba 1 1
6102 AAad 4 2
6103 AAaf 4 2
6104 AAa 1 1
6105 AAtar 4 2
6106 AAao 1 1
6107 ABya 4 2
6108 ABar 4 2
6109 ACar 1 2
6110 BCad 3 1
6111 CCas 4 1
6112 DCas 4 2
6113 GCaz 2 2
6114 FCaew 2 2
6115 FCaw3 4 2
6116 FCa3 1 1
6117 FCa4 4 2
6118 FCa5 2 1
6119 FCa6 4 2 --- last id
表消息以後,ID是主鍵,標題 - 是標題字段, 貓 - 有四種類型的消息類別,朗 - 語言代碼1或2。選擇N行之前和給定行與條件
我想實現如下: 1)案例編輯新聞 - ID是可用 - 例如6111,lang是1,貓是4 我想收集這些ID和標題:
6119
6117
6115
6112
6109
6105
6103
6102
它們是相反的語言 - lang是2中,相同類別貓是4和內的4(或n)之前ID範圍 和給定id 6111 還命令降序
2)情況後添加新聞 - ID不可用,或者在PHP插件mysql_insert_id() 相同的功能之後 - 去年10 ID與同貓= 4,相反LANG = 2
到目前爲止,我已經試過這樣:
爲案例1)PHP代碼片段:
$id = 6111;
$lang = 1;
$tip = 4;
$sql = "SELECT id, title
FROM pubs
WHERE id BETWEEN ".($id-4)." AND ".($id+4). " AND
tip = ".$tip." AND
lang <> ".$lang."
ORDER BY id DESC ";
但是這得到4個id前後id,而不是從我需要的id集合。
的情況下2)
$sql = "SELECT id, title
FROM news
WHERE cat = 4 AND
lang <> 1
ORDER BY id DESC LIMIT 10";
這似乎是工作,但可能是我錯了。
有沒有辦法用php和mysql來實現案例1? 案例2更好的方法?
+1醜陋,但更可能是正確的:P – mellamokb
@mellamokb令人難以置信的醜陋,我確信有一個更有效的方法來做到這一點,但現在我不能爲我的生活弄清楚如何。至少不是在單個查詢中,我想可以將最內部查詢的結果緩存在變量中,但我懷疑額外的數據庫流量會抵消增益。 – DaveRandom
大聲笑,從來沒有見過這個錯誤:「這個版本的MySQL還不支持'LIMIT&IN/ALL/ANY/SOME子查詢':http://www.sqlfiddle.com/#!2/dabe3/1 – mellamokb