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は主キー、title-はタイトルフィールド、cat-ニュースには4種類のカテゴリがあり、lang-言語コード1または2です。
次のことを達成したい:1)ケース編集ニュース-idが利用可能-たとえば6111、langは1、catは4これらのidとタイトルを収集したい:
6119
6117
6115
6112
6109
6105
6103
6102
これは反対の言語です-langは2で、同じカテゴリのcatは4で、指定されたid 6111の前後のidが4(またはn)の範囲内にあります。
2)ケース追加ニュース-idが利用できないか、phpに挿入した後mysql_insert_id()が同じ機能-同じcat=4で反対のlang=2の最後の10id
これまで私はこれを試しました:
ケース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 ";
しかし、これは、必要なidのコレクションからではなく、idの前後に4つのidを取得します。
ケース2の場合)
$sql = "SELECT id, title
FROM news
WHERE cat = 4 AND
lang <> 1
ORDER BY id DESC LIMIT 10";
これは機能しているようですが、私が間違っている可能性があります。
phpとmysqlでケース1を達成する方法はありますか?ケース2のより良い方法は?