|
|
|
|
|
для: Trianon
(03.04.2007 в 18:34)
| | Ага, про ключи помню. Спасибо! :) | |
|
|
|
|
|
|
|
для: Progar
(03.04.2007 в 18:15)
| | Нормально.
если на всех ключах, всех искомых и приравниваемых полях построены индексы - всё Ок. | |
|
|
|
|
|
|
|
для: Trianon
(03.04.2007 в 17:55)
| | > Может быть коллега с другого форума имеет в виду именно это?
Мне кажется он просто ошибся в своем предположении.
> Другой вопрос, что чисто итало-французкие штучки так получить нельзя.
Да не, чисто не надо.. можно чтоб принадлежали к разных категориям, главное чтоб были итало-франц, напр.. а еще если какие-то, ничего страшного
У меня еще будут аналогичные запросы, где неограниченное кол-во категорий, напр 5-10.. Соответсвенно так будем меняться запрос, напр для 5?
SELECT name,url FROM sponsorsite WHERE sponsorsiteID IN
(
SELECT sponsorsiteID
FROM categorysponsorsite WHERE categoryID IN(2,8,9,26,31)
GROUP BY sponsorsiteID
HAVING COUNT(categorysponsorsiteID) = 5
)
|
Вообще я нормально спроектипровал эти таблицы, не будет слишком большой нагрузки на базу из-за таких запросов? | |
|
|
|
|
|
|
|
для: Progar
(03.04.2007 в 17:42)
| | попадут.
категория американских ...этих... штучек... я забыл, о чем речь :) ... не пройдет через фильтр WHERE ..IN(2,8) внутреннего запроса.
Естественно, двойка в запросе HAVING должна быть равна длине списка WHERE ..IN
Другой вопрос, что чисто итало-французкие штучки так получить нельзя. Тогда запрос должен быть еще сложнее. Может быть коллега с другого форума имеет в виду именно это? | |
|
|
|
|
|
|
|
для: Trianon
(03.04.2007 в 17:34)
| | Вроде б попонятней немного, спасибо..
Правда один человек на другом форуме написал:
HAVING COUNT(categorysponsorsiteID) = 2
выбирает из всех предъидущей выборки те сайты , которые принадлежать только двум! категориям.
Но мой тест показал, что вроде попадают.. т.е. напр попадают франзуско-итальянско-американские.. а он считает что не попадут.. потому как попадают только с двумя категориями..
Тест говорит обратное, но интересно твое мнение. | |
|
|
|
|
|
|
|
для: Progar
(03.04.2007 в 17:15)
| | Внутренний запрос читается так:
а)из таблицы categorysponsorsite выбрать все строки, в которых categoryID попадают в список(2,8)
б)строки с одним и тем же значением поля sponsorsiteID объединить в группы
в)вывести в качестве результата поле sponsorsiteID тех групп, в которых число строк равно двойке.
внешний запрос: вывести поля name,url тех строк таблицы sponsorsite, поле sponsorsiteID которых имеется в списке результата вложенного запроса. | |
|
|
|
|
|
|
|
для: Trianon
(03.04.2007 в 12:35)
| |
SELECT name,url FROM sponsorsite WHERE sponsorsiteID IN
(
SELECT sponsorsiteID
FROM categorysponsorsite WHERE categoryID IN(2,8)
GROUP BY sponsorsiteID
HAVING COUNT(categorysponsorsiteID) = 2
)
|
Гениально! :) Мало того написать, я осмыслить запрос пока не могу.. Может со временем пока буду кат-энд-пейстить в будущем осенит меня :) | |
|
|
|
|
|
|
|
для: Trianon
(03.04.2007 в 14:47)
| | Ок, сейчас попробую поставить поновей! Дам знать результаты.. | |
|
|
|
|
|
|
|
для: Progar
(03.04.2007 в 14:40)
| | 3.23.46-nt
Неудивительно. Это очень старый сервер.
Сейчас 5.2, если не ошибаюсь, считается стабильной. | |
|
|
|
|
|
|
|
для: Trianon
(03.04.2007 в 14:27)
| | Ду уж.. у меня по другому че то выходит :) Может версия mysql старая? Уж года 4 у меня лежит..
I:\Documents and Settings\user1>mysql
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 42 to server version: 3.23.46-nt
Type 'help;' or '\h' for help. Type '\c' to clear the buffer.
mysql> use store;
Database changed
mysql> select name,url from sponsorsite where sponsorsiteID IN
-> (
-> SELECT sponsorsiteID
-> FROM categorysponsorsite WHERE categoryID IN(2,8)
-> GROUP BY sponsorsiteID
-> HAVING COUNT(categorysponsorsiteID) = 2
-> )
-> ;
ERROR 1064: You have an error in your SQL syntax near 'SELECT sponsorsiteID
FROM categorysponsorsite WHERE categoryID IN(2,8)
' at line 3
mysql>
|
| |
|
|
|
|