Quiero contar los últimos registros cuando cumplen que:
estado
es igual a 1 usuario_id
es igual 5, y test_id
es igual a 1El número máximo de registros a contar es sólo 3.
Estos registros los tengo en una tabla con la siguiente estructura:
Intenté con count() y limit de esta forma:
public function cuenta($usuarioID,$testID){
$consulta = "SELECT COUNT(*) AS total
FROM (SELECT 1
FROM repuestas
WHERE estado = 1
AND usuario_id = '$usuarioID'
AND test_id = '$testID'
ORDER BY id DESC
LIMIT 3,3) t";
$resultado = $this->_db->query($consulta) or die(print_r($this->_db->errorInfo()));
return $resultado->fetch(PDO::FETCH_ASSOC);
}
El problema que presenta esta consulta es que cuenta todos los que tengan estado en 1, y eso daría 3 (por el limit 3).
Pero si observan la imagen en los últimos 3 registros sólo el 44 tiene estado en 1, y eso me debería arrojar:
que de entre los 3 últimos, sólo 1 tiene estado en 1.
То, что я понимаю, состоит в том, что ты хочешь найти последние 3 реестра для специфической комбинации usuario_id
и test_id
. И, потом, между этими последними 3 реестрами, ты хочешь рассказать, сколькие у них есть estado_id = 1
.
Если я понял хорошо вопрос, тогда это консультация SQL, в которой ты нуждаешься:
select count(case when estado_id = 1 then 'X' end)
from (select estado_id
from repuestas
where usuario_id = 5 -- aquí usarías $usuarioID, estoy usando 5 como ejemplo.
and test_id = 1 -- aquí usarías $testID, estoy usando 1 como ejemplo.
order by id desc
limit 3) t
или эта также эквивалентная:
select count(*)
from (select estado_id
from repuestas
where usuario_id = 5 -- aquí usarías $usuarioID, estoy usando 5 como ejemplo.
and test_id = 1 -- aquí usarías $testID, estoy usando 1 como ejemplo.
order by id desc
limit 3) t
where estado_id = 1
SQL, объединенный с твоим кодом PHP
public function cuenta($usuarioID,$testID){
$consulta = "select count(case when estado = 1 then 'X' end) as total
from (select estado_id
from repuestas
where usuario_id = '$usuarioID'
and test_id = '$testID'
order by id desc
limit 3) t";
$resultado = $this->_db->query($consulta) or die(print_r($this->_db->errorInfo()));
return $resultado->fetch(PDO::FETCH_ASSOC);
}
или...
public function cuenta($usuarioID,$testID){
$consulta = "select count(*) as total
from (select estado_id
from repuestas
where usuario_id = '$usuarioID'
and test_id = '$testID'
order by id desc
limit 3) t
where estado_id = 1";
$resultado = $this->_db->query($consulta) or die(print_r($this->_db->errorInfo()));
return $resultado->fetch(PDO::FETCH_ASSOC);
}
Консультация всегда будет давать тебе как результат 3 благодаря тому, что ты используешь estado = 1
как я просачиваюсь. Из-за многого, который ты использовал limit 3
он возьмет тебе последние три реестра, которые у них есть estado = 1
а именно, те, которые у них есть, пойдите 44, 43 и 42, так как ты не имеешь в виду реестры, которые у них есть estado = 0
.
Просто удали твоей консультации estado = 1
.
Кроме того, другая ошибка, которую я нашел в твоей консультации, - LIMIT, который у тебя есть. Это у тебя есть как LIMIT 3,3
или то, что является тем же самым, LIMIT 3 OFFSET 3
. Следовательно, твоя консультация возьмет последние три реестра начиная с четверти из-за конца (вмещаясь они пойдите 43, 42 и 41, которые у них есть estado = 1
).
Чтобы упорядочивать ее совсем помести просто LIMIT 3
.
Твоя конечная консультация осталась бы как:
$consulta = "SELECT COUNT(*) AS total FROM (SELECT 1 FROM repuestas WHERE usuario_id = '$usuarioID' AND test_id = '$testID' ORDER BY id DESC LIMIT 3) t";
SELECT 1
? Сейчас я проверяю твою консультацию снова.
– Francisco Romero
30.10.2016, 02:58
SELECT 1
я это помещаю, из-за которого консультация, которую ты видишь между скобками, как optuve этой страницы сочетается count (*) и limit , и я изменил ее немножко: D
– jsoe jose
30.10.2016, 03:03
проблема, которая у меня есть, состоит в том, что он не считает последние три реестра, если не последние 3, что Вашего состояния было 1, и брось, что у меня есть 3, когда я в действительности был бы должен бросать 1. с уже большое спасибо из-за помощи, которую они могут предоставлять :D
Тогда удали WHERE estado = 1
Так как ты показываешь в консультации, что я только считал реестры с состоянием, равным 1.
public function cuenta($usuarioID,$testID){ $consulta = "SELECT COUNT(*) AS total FROM (SELECT 1 FROM repuestas WHERE usuario_id = '$usuarioID' AND test_id = '$testID' ORDER BY id DESC LIMIT 3,3) t"; $resultado = $this->_db->query($consulta) or die(print_r($this->_db->errorInfo())); return $resultado->fetch(PDO::FETCH_ASSOC); }
, но продолжает один говоря, что их 3 и не один, дело в том, что ему нужен distinc?
– jsoe jose
30.10.2016, 02:48
$usuarioID
и$testID
это определять и # 225; стоимость, которой он мстит в переменной. В этом случае он кажется того, чтобы быть всегда тем же самым, но мы не знаем, есть ли у оставшейся части таблицы другая отличная стоимость для этих двух полей или нет. – Francisco Romero 30.10.2016, 03:00$usuarioID
относительно пользователя, который вошел в систему и$testID
, определяет тест, что присутствующий вышеупомянутый пользователь код уже был осуществлен, и функционирует тысячи чудес только, чтоestado_id
не, потому что он говорил, что он не существовал, это сменил на*
, и функционировала тысяча спасибо: D – jsoe jose 30.10.2016, 05:43select 1
. Поскольку ты можешь видеть, я это cambi и # 233; вselect estado_id
. Он радует меня, что оно ты функционировало. – sstan 30.10.2016, 05:47select 1
и нем pregunt и # 233; но как я воспринимаюсь ответ pens и # 233; что это было чем-то, что hab и # 237; в созданный и #233; l для консультации, хотя он был похож очень редкий xD – Francisco Romero 30.10.2016, 12:26