2015-03-20 8 views
0

У меня есть эта таблица в MySQL; enter image description hereMYSQL выбрать запрос, возвращающий нежелательные результаты

Я пытаюсь получить cc_rowid 10 и cc_type В строке 10 по этому запросу;

$stmt = $mysqli->prepare("SELECT MAX(cc_rowid),MAX(cc_type) 
    FROM clock_clockings 
    WHERE cc_eeno =(SELECT cc_eeno FROM clock_clockings WHERE cc_rowid=?)"); 

Это дает мне cc_rowid = 10 и cc_type = Out.

Я не понимаю, как улучшить это, чтобы получить желаемые результаты. Я был бы признателен за любую помощь в этом. благодаря

+0

Что вы получаете, когда вы делаете максимум из строки? – Minh

+0

@Minh I ** думаю ** это самый большой размер байта строки, но это может быть самая длинная длина символа. Я также понимаю, что это может быть риторический вопрос: -p – Martin

+0

'MAX (cc_type)' здесь ошибка, мы можем использовать только агрегатную функцию MAX() в случае чисел. 'Out' имеет больше символов, чем' In'. Таким образом, он отображал cc_type = Out. –

ответ

1

Если вы пытаетесь получить cc_type от максимальной cc_rowid вам нужно что-то вроде:

SELECT cc_rowid, cc_type 
FROM clock_clockings 
WHERE cc_rowid = (SELECT max(cc_rowid) FROM clock_clockings); 

Вы могли бы сделать то же самое с внутренним соединением и тот же подзапрос. Шесть из них, полдюжины других. Вы могли бы добавить еще одну логику WHERE в подзапрос, чтобы отфильтровать все, что вам не нужно, в агрегации max.

+0

Это сработало отлично, я тогда подумал, что я мог бы использовать это; $ stmt = $ mysqli-> prepare ("SELECT cc_rowid, cc_type FROM clock_clockings WHERE cc_out IS NULL И cc_eeno = (SELECT cu_eeno FROM clock_users WHERE cu_id =?)"); это запустит cu_id и будет ook для нулевого значения в столбце cc_out @Martin благодарит много за то, что вы получили время и ответили супер быстро ..obliged – aamir

0

Ответ JNevill вам подходит. Однако я хотел бы добавить, как вы тока проблема вызвана:

$stmt = $mysqli->prepare("SELECT MAX(cc_rowid),MAX(cc_type) 
    FROM clock_clockings 
    WHERE cc_eeno =(SELECT cc_eeno FROM clock_clockings WHERE cc_rowid=?)"); 

Вы в настоящее время пытаются захватить значение MAX для cc_rowid и cc_type, так как данные cc_type является строка, которую он получает один рение W самый большой контент - самый длинный - вот почему представлен «Out».

Вам не нужно MAX на этот выбор, так что попробуйте:

$stmt = $mysqli->prepare("SELECT MAX(cc_rowid), cc_type 
     FROM clock_clockings 
     WHERE cc_eeno =(SELECT cc_eeno FROM clock_clockings WHERE cc_rowid=?)"); 
+1

это решение не даст cc_type max cc_rowid, он также пропустил группу cc_type, но снова он не даст cc_type max cc_rowid, он дает максимум cc_rowid за каждый cc_type – jfun

+0

Большое спасибо за ваш быстрый быстрый ответ. – aamir

Смежные вопросы