|
|
|
| Здравствуйте.
Есть таблица типа:
----------------------------
!id!group!mat1!mat2!
----------------------------
! 1! 1! 22! 23!
! 2! 1! 56! 58!
! 3! 1! 63! 11!
! 4! 2! 77! 14!
! 5! 2! 34! 2!
! 6! 2! 30! 7!
---------------------------
Как одним запросом проверить содержит ли любая из групп (group) и материал 7 и материал 8 причем материалы могут быть расположены и в mat1 и в mat2.
Помогите пожалуйста, кто знает. Очень нужно. Плиз. | |
|
|
|
|
|
|
|
для: bitlz
(21.05.2008 в 09:50)
| | Можно отталкиваться от запроса вида
SELECT * FROM tbl
WHERE (mat1=7 AND mat2=8) OR (mat1=8 AND mat2=7)
|
PS Информация в каком виде должна выводиться - "содержи/не содержит" или просто вывести группы, которые такие материалы содержат? | |
|
|
|
|
|
|
|
для: cheops
(21.05.2008 в 11:31)
| | Дело в том, что оба материала должны быть в группе, но не обязательно в одной строке.
Да, нужны группы, причем не id а SELECT `group` WHERE ... GROUP BY `group` | |
|
|
|
|
|
|
|
для: bitlz
(21.05.2008 в 13:04)
| | >Дело в том, что оба материала должны быть в группе, но не обязательно в одной строке.
Не понятно различие. | |
|
|
|
|
|
|
|
для: cheops
(22.05.2008 в 00:29)
| | В общем попробую с другой стороны.
Конструкция которая была использована выглядит так:
function is_in_group(){
$q=mysql_query("select `group` from table where `mat1`=7 group by `group`");
while($row=mysql_fetch_row($q)){
$q1=mysql_query("select `group` from table where `group`=$row[0] and mat2=8");
if(mysql_num_rows($q1)>0) return true;
}
return false;
}
При десяти группах все работает хорошо, но когда количество групп увеличится скажем до сотни, то за место одного запроса будет сто один.
Ранее я делал что-то подобное, но не помню ни где ни как.
Перерыл исходники, не нашел, всю башку сломал, не вспомнил.
Знаю нужен подзапрос, но как его сформулировать не знаю.
Заранее благодарен!!! Прошу помощи.
|
| |
|
|
|
|
|
|
|
для: bitlz
(22.05.2008 в 19:44)
| | Вот конструкция которая у меня получилась:
SELECT `group`
FROM table
WHERE
(
mat1 = 7
OR mat2 = 7
)
AND `group`
IN
(
SELECT `group`
FROM table
where
(mat1 = 8
OR
mat2 = 8)
group by `group`
)
GROUP BY `group`
|
Вот рабочая конструкция | |
|
|
|