Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум MySQL

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум (новые сообщения вниз) Структурный форум

тема: Сложный запрос в MySQL

Сообщения:  [1-10]   [11-16] 

 
 автор: Progar   (03.04.2007 в 20:17)   письмо автору
 
   для: Trianon   (03.04.2007 в 18:34)
 

Ага, про ключи помню. Спасибо! :)

   
 
 автор: Trianon   (03.04.2007 в 18:34)   письмо автору
 
   для: Progar   (03.04.2007 в 18:15)
 

Нормально.
если на всех ключах, всех искомых и приравниваемых полях построены индексы - всё Ок.

   
 
 автор: 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



Вообще я нормально спроектипровал эти таблицы, не будет слишком большой нагрузки на базу из-за таких запросов?

   
 
 автор: Trianon   (03.04.2007 в 17:55)   письмо автору
 
   для: Progar   (03.04.2007 в 17:42)
 

попадут.
категория американских ...этих... штучек... я забыл, о чем речь :) ... не пройдет через фильтр WHERE ..IN(2,8) внутреннего запроса.
Естественно, двойка в запросе HAVING должна быть равна длине списка WHERE ..IN

Другой вопрос, что чисто итало-французкие штучки так получить нельзя. Тогда запрос должен быть еще сложнее. Может быть коллега с другого форума имеет в виду именно это?

   
 
 автор: Progar   (03.04.2007 в 17:42)   письмо автору
 
   для: Trianon   (03.04.2007 в 17:34)
 

Вроде б попонятней немного, спасибо..

Правда один человек на другом форуме написал:

HAVING COUNT(categorysponsorsiteID) = 2
выбирает из всех предъидущей выборки те сайты , которые принадлежать только двум! категориям.

Но мой тест показал, что вроде попадают.. т.е. напр попадают франзуско-итальянско-американские.. а он считает что не попадут.. потому как попадают только с двумя категориями..

Тест говорит обратное, но интересно твое мнение.

   
 
 автор: Trianon   (03.04.2007 в 17:34)   письмо автору
 
   для: Progar   (03.04.2007 в 17:15)
 

Внутренний запрос читается так:
а)из таблицы categorysponsorsite выбрать все строки, в которых categoryID попадают в список(2,8)
б)строки с одним и тем же значением поля sponsorsiteID объединить в группы
в)вывести в качестве результата поле sponsorsiteID тех групп, в которых число строк равно двойке.

внешний запрос: вывести поля name,url тех строк таблицы sponsorsite, поле sponsorsiteID которых имеется в списке результата вложенного запроса.

   
 
 автор: Progar   (03.04.2007 в 17:15)   письмо автору
 
   для: 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



Гениально! :) Мало того написать, я осмыслить запрос пока не могу.. Может со временем пока буду кат-энд-пейстить в будущем осенит меня :)

   
 
 автор: Progar   (03.04.2007 в 14:55)   письмо автору
 
   для: Trianon   (03.04.2007 в 14:47)
 

Ок, сейчас попробую поставить поновей! Дам знать результаты..

   
 
 автор: Trianon   (03.04.2007 в 14:47)   письмо автору
 
   для: Progar   (03.04.2007 в 14:40)
 

3.23.46-nt

Неудивительно. Это очень старый сервер.
Сейчас 5.2, если не ошибаюсь, считается стабильной.

   
 
 автор: Progar   (03.04.2007 в 14:40)   письмо автору
 
   для: 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>

   

Сообщения:  [1-10]   [11-16] 

Форум разработан IT-студией SoftTime
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования