我被这个难倒了。我尝试了几个角度,有些角度接近但没有一个完全正确。
我需要从表格的3个字段中进行选择。第一个是log_id,每行有一个唯一的编号,第二个是entry_id,它来自另一个表,并且具有相同条目号的倍数,最后一个是表示类型的单个字母。 'D'表示相应的条目已被删除,BTW。
示例:
"SELECT log_id, entry_id, type from entry_log order by entry_id";
...具有以下示例结果(真实查询的片段):
6 1 C
31 1 D
8 2 C
25 2 D
11 3 C
14 3 D
13 3 D
18 4 D
17 4 D
12 4 C
22 5 D
15 5 C
398 6 U
249 6 U
44 6 U
587 6 R
272 6 U
498 6 R
578 6 U
590 6 U
529 6 R
564 6 D
43 7 U
42 7 D
16 7 C
我需要选择行[2]值等于'D'的每一行[1]值的最高行[0]值。换句话说,当行[1] = 6时的正确选择是上面的数组中的行[0] = 564。我需要将一个entry_id(row [1])和它对应的log_id(row [0])放到另一个数组中。
我尝试了以下内容:
"SELECT MAX(log_id), entry_id, type from entry_log where type = 'D'";
这并没有考虑到某些row1的条目高于匹配D的条目(因为它们不再被删除)。
我试过后退:
"SELECT log_id, entry_id, type from entry_log where log_id in ('U','R','C','x')";
再次不合逻辑。
$log = "SELECT log_id, entry_id, type from entry_log order by entry_id;
$lgcomp = mysql_query($log);
while ($row = mysql_fetch_array($logcomp, MYSQL_NUM)) {
$cli = $row[0];
$cei = $row[1];
$ct = $row[2];
}
foreach ($cli as $key=>$clid)
if $cei =
... ...难倒
foreach($cli as $key => $clid){
$lgentry = $cei[$key];
switch($clid) {
case $lgentry = :
break;
......无法想象......
我只是没有对PHP mysql语法的技术理解才能使其正确显示。
任何和所有的想法或只是指出我正确的方向将不胜感激。不,你不需要编写我的脚本(我喜欢弄清楚这对我来说是什么)但是我已经在这个上花了很多时间我知道我只是缺少一些语法并理解PHP / mysql中的排序。就互联网搜索而言,我只想出了永无止境的重复,在这种情况下没有帮助。
谢谢!这位72岁的老人在过去几周里学到了很多东西。
答案 0 :(得分:1)
试试这个:
select el1.* from entry_log el1
left join (
select entry_id, log_id from entry_log
where type = 'D'
) el2
on el1.entry_id = el2.entry_id and el1.log_id < el2.log_id
where el2.log_id is null and el1.type = 'D'
结果:
+--------+----------+------+ | LOG_ID | ENTRY_ID | TYPE | +--------+----------+------+ | 31 | 1 | D | | 25 | 2 | D | | 14 | 3 | D | | 18 | 4 | D | | 22 | 5 | D | | 564 | 6 | D | | 42 | 7 | D | +--------+----------+------+