вы пробовали
...
AND (a.sequence=0 OR a.sequence=1)
...
Я бы присоединяетесь вместо того, чтобы использовать все те, где заявление, а также оптимизировать этот запрос.
SELECT
a.modelyear,
count(*) as yearcount
FROM
styles a
INNER JOIN jpgs b ON (a.styleid = b.styleid)
INNER JOIN models c ON (c.modelid = a.modelid)
INNER JOIN divisions d ON (d.divisionid = c.divisionid)
WHERE
a.mktclassid in ($this->mktclassids)
AND (a.sequence=0 OR a.sequence=1)
$this->where
GROUP BY
a.modelyear;
В приведенном выше запросе будут получены все элементы, которые являются последовательностями 1 ИЛИ 0, этот следующий запрос заставлял меня задуматься. Я объясню с запросом комментариями #
, но он должен получить элементы, которые не имеют как последовательность 1 и 0:
SELECT
a.modelyear,
count(*) as yearcount
FROM
styles a
INNER JOIN jpgs b ON (a.styleid = b.styleid)
INNER JOIN models c ON (c.modelid = a.modelid)
INNER JOIN divisions d ON (d.divisionid = c.divisionid)
WHERE
a.mktclassid in ($this->mktclassids)
#above same as previous
#and where modelid is in modelids either having sequence 0 or 1 but not both:
AND a.modelid IN (
#SELECT modelids that have either sequence 0 or 1 but not both
SELECT
styles.modelid
FROM
styles
WHERE
(
styles.modelid IN (#modelids having sequence 0 but not 1
SELECT
styles.modelid
FROM
styles
WHERE
styles.sequence=0
GROUP BY
styles.modelid
) AND
styles.modelid NOT IN (
SELECT
styles.modelid
FROM
styles
WHERE
styles.sequence=1
GROUP BY
styles.modelid
)
)
OR
(
styles.modelid NOT IN (#modelids having sequence 1 but not 0
SELECT
styles.modelid
FROM
styles
WHERE
styles.sequence=0
GROUP BY
styles.modelid
) AND
styles.modelid IN (
SELECT
styles.modelid
FROM
styles
WHERE
styles.sequence=1
GROUP BY
styles.modelid
)
)
)
$this->where
GROUP BY
a.modelyear
Я надеюсь, что это не слишком запутанная
состояние пользователя запрос выполняется навсегда. Попробуйте только эту часть подзапроса и сообщите мне о ее производительности.
SELECT
styles.modelid
FROM
styles
WHERE
(
styles.modelid IN (
SELECT
styles.modelid
FROM
styles
WHERE
styles.sequence=0
GROUP BY
styles.modelid
) AND
styles.modelid NOT IN (
SELECT
styles.modelid
FROM
styles
WHERE
styles.sequence=1
GROUP BY
styles.modelid
)
)
OR
(
styles.modelid NOT IN (
SELECT
styles.modelid
FROM
styles
WHERE
styles.sequence=0
GROUP BY
styles.modelid
) AND
styles.modelid IN (
SELECT
styles.modelid
FROM
styles
WHERE
styles.sequence=1
GROUP BY
styles.modelid
)
)
так я просто смотрю, чтобы получить различное modelids из таблицы, но предпочитаемый, что последовательность будет 0 или 1 - OP
SELECT
modelid,
sequence
FROM
(
SELECT
modelid,
sequence
FROM
styles
ORDER BY
sequence ASC
) AS sub_query
GROUP BY
modelid
Thats именно то, что мне нужно. Как я могу добавить это как предложение where к моему первоначальному запросу?- OP
SELECT
a.modelyear,
count(*) as yearcount
FROM styles a, jpgs b, models c, divisions d
WHERE d.divisionid = c.divisionid
AND a.styleid = b.styleid
AND c.modelid = a.modelid
AND a.mktclassid in ($this->mktclassids)
AND a.modelid IN (
SELECT
modelid
FROM
(
SELECT
modelid,
sequence
FROM
styles
ORDER BY
sequence ASC
) AS sub_query
GROUP BY
modelid
)
$this->where
GROUP BY a.modelyear;
Что бы привести к таким же, как:
SELECT
a.modelyear,
count(*) as yearcount
FROM styles a, jpgs b, models c, divisions d
WHERE d.divisionid = c.divisionid
AND a.styleid = b.styleid
AND c.modelid = a.modelid
AND a.mktclassid in ($this->mktclassids)
AND a.modelid IN (
SELECT
modelid
FROM
styles
GROUP BY
modelid
)
$this->where
GROUP BY a.modelyear;
Я не думаю, что это то, что вы хотите, хотя acutally. Вам не нужно это как предложение WHERE, но вам нужно иметь совершенно лучший запрос. Необходимы ли другие таблицы? Что такое$this->where
equate to?
Подумав об этом в течение еще одного часа, я думаю, что это может быть то, что вы на самом деле хотите. Это ограничивает таблицу стилей только один ModelID и сортирует их по самой низкой последовательности, а затем она соединяется с другими таблицами и применяет mktclassid в пункте и пункт $this->where
:
SELECT
a.modelyear,
count(*) as yearcount
FROM
(
SELECT
*
FROM
(
SELECT
*
FROM
styles
ORDER BY
sequence ASC
) subquery
GROUP BY
modelid
) a
INNER JOIN jpgs b ON (a.styleid = b.styleid)
INNER JOIN models c ON (c.modelid = a.modelid)
INNER JOIN divisions d ON (d.divisionid = c.divisionid)
WHERE
a.mktclassid in ($this->mktclassids) AND
$this->where
GROUP BY a.modelyear;
После этого я сделал и есть больше не давать советы, кроме ЗАКАЗАТЬ Ваш вопрос и ПОЖАЛУЙСТА укажите sqlFiddle и дайте больше примеров ожидаемого результата. Иногда проблема, с которой вы сталкиваетесь, заключается в том, что то, что вы пытаетесь сделать, - это неправильно. Если возможно, всегда указывайте причину, почему вы делаете что-то другое, кроме только моей проблемы ... Другие могут упростить процесс и предоставить решение, которое решает настоящую проблему. Удачи!
Непонятный вопрос. Вы говорите, что последовательность равна 0 или 1, но ваш пример таблицы стилей показывает множество последовательностей, которые не равны 0 или 1, и ни один из них не равен 0. – Barmar
Не могли бы вы разместить более полный пример таблиц ввода и вы надеетесь получить от этого? Возможно, сделайте sqlfiddle. – Barmar
ОП не знает, чего он на самом деле хочет. См. Мой ответ ниже и все комментарии по нему. ОР должен уточнить, что ему нужно, и должен сделать это с помощью http://sqlfiddle.com/ примера базы данных и вывода примера, который пытается достичь, и что это такое, что не дает правильного вывода. последовательность не влияет на то, что ОП заявила, что он нуждается в последнем в комментариях .... – amaster