gpt4 book ai didi

php - 选择具有条件的给定行前后的 N 行

转载 作者:行者123 更新时间:2023-11-29 00:45:24 24 4
gpt4 key购买 nike

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

表news,id是主键,title-是标题字段,cat - 新闻有四种类型,lang - 语言代码 1 或 2。

我想实现以下目标:1)案例编辑新闻 - id可用 - 例如6111,lang为1,cat为4我想收集这些 id 和 titles:

6119
6117
6115
6112
6109
6105
6103
6102

哪些是相反的语言 - lang 是 2,同一类别 cat 是 4 和在给定 id 6111 之前和之后的 4(或 n)个 id 范围内还订购了desc

2) Case Add news - id不可用,或者在php中插入后是mysql_insert_id()相同的功能 - 最后 10 个 id 具有相同的 cat = 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 ";

但是这会在 id 前后获取 4 个 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 的更好方法?

最佳答案

鉴于您只有 $id,这个长相可怕的野兽是我能想到的最好的。我相当确定有一种更简洁的方法来做到这一点,但我认为这会起作用(已修复)

$id = 6111;

$query = "
SELECT `id`, `title`
FROM `news`
WHERE `id` IN (
SELECT * FROM (
SELECT `id`
FROM `news`
WHERE `cat` = (
SELECT `cat`
FROM `news`
WHERE `id` = ".$id."
) AND `lang` != (
SELECT `lang`
FROM `news`
WHERE `id` = ".$id."
) AND `id` < ".$id."
ORDER BY `id` DESC
LIMIT 4
) `lower`
) OR `id` IN (
SELECT * FROM (
SELECT `id`
FROM `news`
WHERE `cat` = (
SELECT `cat`
FROM `news`
WHERE `id` = ".$id."
) AND `lang` != (
SELECT `lang`
FROM `news`
WHERE `id` = ".$id."
) AND `id` > ".$id."
ORDER BY `id` ASC
LIMIT 4
) `upper`
)
ORDER BY `id` DESC
";

关于php - 选择具有条件的给定行前后的 N 行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10703002/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com