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

Форум MySQL

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

 

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

вид форума:
Линейный форум Структурный форум

тема: оптимизация большого WHERE
 
 автор: GooD   (06.04.2008 в 17:36)   письмо автору
 
 

помогите, пожалуйста, правильно составить запрос.
вот тот, который я составил:
SELECT secondary.SecondaryID,secondary.RoomCount, district.DistrictName, street.StreetVisibleName, secondary.FloorValue,
    secondary.SquareValue, secondary.Sanitary, secondary.Phone, secondary.Price
FROM secondary
    LEFT JOIN street ON secondary.StreetID = street.StreetID
    LEFT JOIN subdistrict ON secondary.SubdistrictID = subdistrict.SubdistrictID
    LEFT JOIN district ON secondary.DistrictID = district.DistrictID
WHERE
    TypeObject = 1
    AND secondary.districtID = 1
    OR secondary.districtID = 2
    OR secondary.districtID = 3
    OR secondary.districtID = 4
    OR secondary.districtID = 5
    OR secondary.districtID = 6
    OR secondary.subdistrictID = 1
    OR secondary.subdistrictID = 2
    OR secondary.subdistrictID = 3
    OR secondary.subdistrictID = 4
    OR secondary.subdistrictID = 5
    OR secondary.subdistrictID = 6
    OR secondary.streetID = 1
    OR secondary.streetID = 2
    OR secondary.streetID = 3
    OR secondary.streetID = 4
    OR secondary.streetID = 5
    OR secondary.streetID = 6
    OR secondary.planTypeID = 1
    OR secondary.planTypeID = 2
    OR secondary.planTypeID = 3
    OR secondary.planTypeID = 4

из-за множественного OR в выводе оказываются строки, которые не соответствуют параметрам запроса (например, те, у которых TypeObject = 2 и т.д.).
логически понимаю, что нужно либо как-то переписать запрос. пробовал добавлять скобки, пробовал писать в виде secondary.streetID = (1 OR 2 OR 3), результат всё равно меня не удовлетворил, прощу помощи

   
 
 автор: cheops   (06.04.2008 в 18:02)   письмо автору
 
   для: GooD   (06.04.2008 в 17:36)
 

Попробуйте следующий запрос
SELECT secondary.SecondaryID,secondary.RoomCount, district.DistrictName, street.StreetVisibleName, secondary.FloorValue, 
    secondary.SquareValue, secondary.Sanitary, secondary.Phone, secondary.Price 
FROM secondary 
    LEFT JOIN street ON secondary.StreetID = street.StreetID 
    LEFT JOIN subdistrict ON secondary.SubdistrictID = subdistrict.SubdistrictID 
    LEFT JOIN district ON secondary.DistrictID = district.DistrictID 
WHERE 
    TypeObject = 1 
    AND secondary.districtID IN (1, 2, 3, 4, 5, 6)
    AND secondary.subdistrictID IN (1, 2, 3, 4, 5, 6)
    AND secondary.streetID IN (1, 2, 3, 4, 5, 6)
    AND secondary.planTypeID IN (1, 2, 3, 4)

   
 
 автор: mechanic   (08.04.2008 в 14:38)   письмо автору
 
   для: cheops   (06.04.2008 в 18:02)
 

ну или

SELECT secondary.SecondaryID,secondary.RoomCount, district.DistrictName, street.StreetVisibleName, secondary.FloorValue, 
    secondary.SquareValue, secondary.Sanitary, secondary.Phone, secondary.Price 
FROM secondary 
    LEFT JOIN street ON secondary.StreetID = street.StreetID 
    LEFT JOIN subdistrict ON secondary.SubdistrictID = subdistrict.SubdistrictID 
    LEFT JOIN district ON secondary.DistrictID = district.DistrictID 
WHERE 
    TypeObject = 1  AND 
    (
    secondary.districtID IN (1, 2, 3, 4, 5, 6)
    OR secondary.subdistrictID IN (1, 2, 3, 4, 5, 6)
    OR secondary.streetID IN (1, 2, 3, 4, 5, 6)
    OR secondary.planTypeID IN (1, 2, 3, 4)
    )

для случая, когда нужно, чтоб хотя бы 1 параметр попал в заданный список

   
Rambler's Top100
вверх

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