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 :: Помогите составить SQL запрос

 PHP.SU

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


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

> Без описания
NeuroZ
Отправлено: 19 Июня, 2015 - 11:42:43
Post Id



Посетитель


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


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




Всем привет! Во вложении файл с таблицей.
Помогите, пожалуйста, разобраться как составить запрос со "смешанным" WHERE.
Т.е.
Мне нужно чтобы такая конструкция:
CODE (SQL):
скопировать код в буфер обмена
  1. WHERE ((virtuemart_custom_id = 4 AND val = 1) OR (virtuemart_custom_id = 4 AND val = 2)) AND (virtuemart_custom_id = 6 AND val = 13) AND (virtuemart_custom_id = 7 AND val = 15)

Возвращала мне 2 записи virtuemart_product_id = 1 и virtuemart_product_id = 3. Но она возвращает "пусто". Видимо из-за того, что запрос не верный... но я не могу понять как мне надо его написать, чтобы получить желаемый результат.

p.s. Вообще условий WHERE может быть больше (они составляются динамически исходя из переданных данных в скрипт)
Прикреплено изображение (Нажмите для увеличения)
19-06-2015 11-38-14.png
 
 Top
NeuroZ
Отправлено: 19 Июня, 2015 - 15:15:27
Post Id



Посетитель


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


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




Ниндзя Растерялся
упрощаю задачу
Вот таблица:
id | cust | val
---------------
1 | 6 | 13
1 | 7 | 15

Как мне выбрать id(1) по условию (cust = 6 and val = 13) and (cust = 7 and val = 15) ?

(Отредактировано автором: 19 Июня, 2015 - 15:29:42)

 
 Top
Sail
Отправлено: 19 Июня, 2015 - 16:05:07
Post Id



Участник


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


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




NeuroZ пишет:
Как мне выбрать id(1) по условию (cust = 6 and val = 13) and (cust = 7 and val = 15) ?

Обратите внимание на следующее сообщение в теме: "Оптимизация категоризированного поиска товаров."
 
 Top
NeuroZ
Отправлено: 19 Июня, 2015 - 16:30:13
Post Id



Посетитель


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


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




Sail пишет:
Обратите внимание на следующее сообщение в теме: "Оптимизация категоризированного поиска товаров[dot]"

не понял чем мне это может помочь... джоинами?

(Отредактировано автором: 19 Июня, 2015 - 17:46:20)

 
 Top
Sail
Отправлено: 20 Июня, 2015 - 10:28:12
Post Id



Участник


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


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




NeuroZ пишет:
не понял чем мне это может помочь...
, например, этим:
CODE (SQL):
скопировать код в буфер обмена
  1. SELECT `id`,
  2.              sum(`cust` = 6) * sum(`cust` = 7) AS filter_0,
  3.              sum(`val` = 13) * sum(`val` = 15) AS filter_1
  4. FROM `tablename`
  5. WHERE `cust` IN (6, 7) AND `val` IN (13, 15)
  6. GROUP BY `id`
  7. HAVING filter_0 > 0 AND filter_1 > 0
 
 Top
NeuroZ
Отправлено: 22 Июня, 2015 - 17:05:44
Post Id



Посетитель


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


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




Sail пишет:
NeuroZ пишет:
не понял чем мне это может помочь...
, например, этим:
CODE (SQL):
скопировать код в буфер обмена
  1. SELECT `id`,
  2.              sum(`cust` = 6) * sum(`cust` = 7) AS filter_0,
  3.              sum(`val` = 13) * sum(`val` = 15) AS filter_1
  4. FROM `tablename`
  5. WHERE `cust` IN (6, 7) AND `val` IN (13, 15)
  6. GROUP BY `id`
  7. HAVING filter_0 > 0 AND filter_1 > 0

Спасибо, вот только не работает ( пусто возвращает
 
 Top
Sail
Отправлено: 22 Июня, 2015 - 17:20:24
Post Id



Участник


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


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




NeuroZ пишет:
Спасибо, вот только не работает ( пусто возвращает

Наверное, где-то опечатались, или умозрительные представления о наличии данных в базе не соответствуют действительности Улыбка
 
 Top
NeuroZ
Отправлено: 23 Июня, 2015 - 09:32:37
Post Id



Посетитель


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


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




Sail пишет:
NeuroZ пишет:
Спасибо, вот только не работает ( пусто возвращает

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

Я не совсем понимаю что значает sum(`cust` = 6)
 
 Top
Sail
Отправлено: 23 Июня, 2015 - 09:50:45
Post Id



Участник


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


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




NeuroZ пишет:
что значает sum(`cust` = 6)
sum - агрегатная функция, возвращающая сумму вычисленного mysql-выражения
Просто посмотрите на вывод следующего запроса:
CODE (SQL):
скопировать код в буфер обмена
  1. SELECT `id`, `cust`, `val`, `cust` = 6, `val` = 13, (`val` = 13) * (`cust` = 6) FROM `tablename`;
 
 Top
NeuroZ
Отправлено: 23 Июня, 2015 - 12:44:25
Post Id



Посетитель


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


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




Ну я примерно так и понял, что она должна вычислять сумму... Но какая сумма в `cust`= 6 ? (как в вашем примере)
 
 Top
Sail
Отправлено: 23 Июня, 2015 - 12:47:20
Post Id



Участник


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


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




NeuroZ пишет:
Но какая сумма в `cust`= 6 ? (как в вашем примере)

CODE (htmlphp):
скопировать код в буфер обмена
  1. # id, cust, val, `cust` = 6, `val` = 13, (`val` = 13) * (`cust` = 6)
  2. '1', '6', '13', '1', '1', '1'
  3. '1', '7', '15', '0', '0', '0'
  4. '2', '5', '12', '0', '0', '0'
  5. '3', '6', '11', '1', '0', '0'
  6. '3', '6', '13', '1', '1', '1'
  7. '3', '7', '15', '0', '0', '0'

(Добавление)
Если убрать условие из запроса с группировкой:
Спойлер (Отобразить)

Получим:
Спойлер (Отобразить)

Для набора:
Спойлер (Отобразить)

(Добавление)
Суммируется, как и ожидалось - результат выражения...
А выражение такое: `cust` = 6. Логическое выражение...
 
 Top
NeuroZ
Отправлено: 23 Июня, 2015 - 15:52:40
Post Id



Посетитель


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


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




Спасибо, что разжевали! Улыбка
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Вопросы новичков »


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



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

 
Powered by ExBB FM 1.0 RC1. InvisionExBB