Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Помогите добавить условие в запрос

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Без описания
Rooner
Отправлено: 27 Октября, 2012 - 13:40:48
Post Id


Посетитель


Покинул форум
Сообщений всего: 291
Дата рег-ции: Авг. 2010  


Помог: 0 раз(а)




Нужно добавить в запрос условие: если materials.type = 'product', то WHERE должно быть таким: materials.status !='2' AND categories.status !='2'
CODE (SQL):
скопировать код в буфер обмена
  1. SELECT DISTINCT materials.*,
  2.                 categories.title AS catTitle,
  3.                 cats_mats.cid
  4. FROM materials
  5. LEFT JOIN cats_mats ON cats_mats.mid = materials.mid
  6. LEFT JOIN categories ON categories.cid = cats_mats.cid
  7. WHERE materials.STATUS !='2'
  8. ORDER BY mid DESC LIMIT 0,5

(Добавление)
Я вот так себе это представляю, разумеется не работает так
CODE (SQL):
скопировать код в буфер обмена
  1. SELECT DISTINCT materials.*,
  2.                 categories.title AS catTitle,
  3.                 cats_mats.cid
  4. FROM materials
  5. LEFT JOIN cats_mats ON cats_mats.mid = materials.mid
  6. LEFT JOIN categories ON categories.cid = cats_mats.cid
  7. WHERE
  8.   IF (materials.type='product') materials.STATUS !='2' AND categories.STATUS !='2'
  9.   else materials.STATUS !='2'
  10. ORDER BY mid DESC LIMIT 0,5

(Отредактировано автором: 27 Октября, 2012 - 13:44:46)

 
 Top
Мелкий Супермодератор
Отправлено: 27 Октября, 2012 - 13:47:27
Post Id



Активный участник


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


Помог: 618 раз(а)




CODE (SQL):
скопировать код в буфер обмена
  1. (materials.type='product' AND materials.STATUS !='2' AND categories.STATUS !='2') OR (materials.type!='product' AND materials.STATUS !='2')


-----
PostgreSQL DBA
 
 Top
dubasua
Отправлено: 27 Октября, 2012 - 13:49:30
Post Id



Посетитель


Покинул форум
Сообщений всего: 454
Дата рег-ции: Апр. 2012  


Помог: 7 раз(а)




Зачем тебе if если тебе все равно строки доставать
CODE (SQL):
скопировать код в буфер обмена
  1.  
  2. SELECT DISTINCT materials.*,
  3.                 categories.title AS catTitle,
  4.                 cats_mats.cid
  5. FROM materials
  6. LEFT JOIN cats_mats ON cats_mats.mid = materials.mid
  7. LEFT JOIN categories ON categories.cid = cats_mats.cid
  8. WHERE
  9.   materials.type='product' AND materials.STATUS !='2' AND categories.STATUS !='2'
  10.   OR materials.STATUS !='2'
  11. ORDER BY mid DESC LIMIT 0,5
  12.  

(Добавление)
Мелкий, опередил.
 
 Top
Rooner
Отправлено: 27 Октября, 2012 - 14:11:42
Post Id


Посетитель


Покинул форум
Сообщений всего: 291
Дата рег-ции: Авг. 2010  


Помог: 0 раз(а)




dubasua, в таблице materials находятся материалы с типами product и page. Причем материалы типа product связаны с категорией(по cid), а page не связаны. Так вот эти запросы выбирают только материалы типа product, а page не удовлетворяет запросу.
Хотя вот этот вариант поидее должен работать, но не работает
CODE (SQL):
скопировать код в буфер обмена
  1.     (materials.type='product' AND materials.STATUS !='2' AND categories.STATUS !='2') OR (materials.type!='product' AND materials.STATUS !='2')
 
 Top
dubasua
Отправлено: 27 Октября, 2012 - 14:15:38
Post Id



Посетитель


Покинул форум
Сообщений всего: 454
Дата рег-ции: Апр. 2012  


Помог: 7 раз(а)




А в каком формате в таблице лежит materials.STATUS?
(Добавление)
Rooner пишет:
IF (materials.type='product') materials.STATUS !='2' AND categories.STATUS !='2'
else materials.STATUS !='2'

Как по мне так это тоже самое что и
dubasua пишет:
materials.type='product' AND materials.STATUS !='2' AND categories.STATUS !='2'
OR materials.STATUS !='2'

(Отредактировано автором: 27 Октября, 2012 - 14:19:00)

 
 Top
Rooner
Отправлено: 27 Октября, 2012 - 14:20:19
Post Id


Посетитель


Покинул форум
Сообщений всего: 291
Дата рег-ции: Авг. 2010  


Помог: 0 раз(а)




dubasua, не заметил что в запросе ограничение LIMIT 0,5. Убрал и запрос сработал! Спасибо Радость
(Добавление)
В готовом виде у меня вот так получилось, классно Улыбка
CODE (SQL):
скопировать код в буфер обмена
  1. SELECT DISTINCT materials.*, categories.title AS catTitle, cats_mats.cid
  2. FROM materials
  3. LEFT JOIN cats_mats ON cats_mats.mid = materials.mid
  4. LEFT JOIN categories ON categories.cid = cats_mats.cid
  5. WHERE (materials.type='product' AND materials.STATUS !='2' AND categories.STATUS !='2') OR (materials.type!='product' AND materials.STATUS !='2')
  6. ORDER BY type ASC
  7. LIMIT 0,50
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« SQL и Архитектура БД »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB