максимальное значение id

граф

Новичок
максимальное значение id

PHP:
// таблица 
CREATE TABLE `chei_klient` (
  `ck_id` int(11) NOT NULL auto_increment,
  `ck_klient` int(11) NOT NULL,
  `ck_sotrudnik` smallint(6) NOT NULL,
  `ck_peredan` date NOT NULL,
  PRIMARY KEY  (`ck_id`),
  KEY `ck_klient` (`ck_klient`)
) ENGINE=MyISAM AUTO_INCREMENT=1743 DEFAULT CHARSET=cp1251 ;


// запрос 

SELECT *, COUNT(*) AS `cnt` 
FROM `chei_klient` 
LEFT JOIN `klient` ON `kl_id`=`ck_klient`
GROUP BY `ck_klient` 
HAVING `cnt` > 1

// в базе записи

ck_id	ck_klient	ck_sotrudnik
918		883			10
1715		883			5
1720		883			10
выбирает запись ck_id=918

как выбрать ck_id=1720 ?

спасибо.
 

Армян

Новичок
ck_id наверное, если по нему надо выбрать максимальное

на форуме есть топики про сортировку внутри группы, в поиск.
 

Gas

может по одной?
я бы сделал так:

Код:
select 
from 
(
  select max(ck_id) as ck_id
  from chei_klient
  group by ck_klient  
  having count(*) > 1
) as t
join chei_klient ...
join klient ...
 

Армян

Новичок
PHP:
SELECT *, MAX(`ck_id`), COUNT(*) AS `cnt` 
FROM `chei_klient` 
LEFT JOIN `klient` ON `kl_id`=`ck_klient`
GROUP BY `ck_klient` 
HAVING `cnt` > 1
попробуй :)
 

Gas

может по одной?
Армян
это только если нужно выбрать максимальный ck_id, а не строку с максимальным ck_id
 

граф

Новичок
Автор оригинала: Армян
PHP:
SELECT *, MAX(`ck_id`), COUNT(*) AS `cnt` 
FROM `chei_klient` 
LEFT JOIN `klient` ON `kl_id`=`ck_klient`
GROUP BY `ck_klient` 
HAVING `cnt` > 1
попробуй :)
пробовал не работает, хотя теоретически должно..


PHP:
 select 
from 
(
  select max(ck_id) as ck_id
  from chei_klient
  group by ck_klient  
  having count(*) > 1
) as t
join chei_klient ...
join klient ...
интересная формулировка. первый раз такое вижу. попробую.
спасибо.
 

граф

Новичок
Автор оригинала: Gas
я бы сделал так:

Код:
select 
from 
(
  select max(ck_id) as ck_id
  from chei_klient
  group by ck_klient  
  having count(*) > 1
) as t
join chei_klient ...
join klient ...
Спасибо.
Я сделал так, вроде бы правильно выдает все что надо.

PHP:
SELECT *
FROM 
(
  SELECT MAX(`ck_id`) AS `ck_id`
  FROM `chei_klient`
  GROUP BY `ck_klient`  
  HAVING count(*) > 1
) AS t
JOIN `chei_klient` c ON `c`.`ck_id`=`t`.`ck_id`
JOIN `klient` ON `kl_id`=`ck_klient` AND `kl_chei`='$klient'
Сейчас еще потестирую. Спасибо.
 

Gas

может по одной?
Разве без подзапроса никак?
ну это не подзапрос, а вложенный запрос.
думаю придумать чё-то можно, но имхо, это оптимальный по производительности вариант (при нужных индексах конечно) - группировка только одной таблицы + пара простейших джойов.
 

граф

Новичок
Автор оригинала: Gas
при нужных индексах конечно
PHP:
FROM 
(
  SELECT MAX(`ck_id`) AS `ck_id`
  FROM `chei_klient` USE INDEX (ck_klient)
  GROUP BY `ck_klient`  
  HAVING count(*) > 1
) AS t
у меня индекс стоит на ck_klient
но есть еще поле ck_sotrudnik
на чем лучше?
 

граф

Новичок
а что значит составной? добавить еще индекс для поля ck_id? и прописать
USE INDEX (ck_klient, ck_id)
 

Gas

может по одной?
это значит индекс в который входит больше одного поля, выполни:
alter table chei_klient add index klient_id(ck_klient, ck_id)

не нужно use index ставить, mysql сам его выберет, смотри explain
 

граф

Новичок
а разница есть какой из них первый стоит?

USE INDEX (ck_klient, ck_id)
или
USE INDEX (ck_id, ck_klient)
 

Gas

может по одной?
мне, кстати, не понятен твой последний запрос, где есть условие `kl_chei`='$klient', что это за условие, ты заранее знаешь какого клиента тебе нужно выбрать?
 
Сверху