X   Сообщение сайта
(Сообщение закроется через 3 секунды)



 

Здравствуйте, гость ( Вход | Регистрация )

Открыть тему
Тема закрыта
> MySQL запрос в БД WordPress, прошу спецов помочь с MySQL
WhiteIce
WhiteIce
Topic Starter сообщение 20.11.2015, 2:20; Ответить: WhiteIce
Сообщение #1


Участник
***

Группа: User
Сообщений: 128
Регистрация: 28.6.2013
Поблагодарили: 26 раз
Репутация:   5  


Доброго времени суток, коллеги. Вопрос по MySQL.
В БД WP есть таблица postmeta , нужно вытянуть записи по значениям нескольких произвольных полей:


в столбце meta_key значение равно product_number И в столбце meta_value значение КАК '%$ключ%'
И
в столбце meta_key значение равно product_price И в столбце meta_value значение > 1000


Т.е. нужно вытянуть товары по двум произвольным полям одновременно - product_number и product_price.

Запрос например такого вида не работает:
Код
SELECT post_id
FROM postmeta
WHERE
meta_key = 'product_number'  AND  meta_value LIKE '%$keywords%'
AND  
meta_key = 'product_price' AND meta_value > 1000


Сообщение отредактировал WhiteIce - 20.11.2015, 2:20


--------------------
0
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
WebFox
WebFox
сообщение 20.11.2015, 5:09; Ответить: WebFox
Сообщение #2


Частый гость
**

Группа: User
Сообщений: 57
Регистрация: 19.12.2008
Поблагодарили: 9 раз
Репутация:   2  


Скобки пробовали?

SELECT post_id
FROM postmeta
WHERE
(meta_key = 'product_number' AND meta_value LIKE '%$keywords%')
AND
(meta_key = 'product_price' AND meta_value > 1000)

Результат запроса пустой или выпадает ошибка?


--------------------


Поблагодарили: (1)
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
SpaceX
SpaceX
сообщение 20.11.2015, 8:22; Ответить: SpaceX
Сообщение #3


Участник
***

Группа: User
Сообщений: 205
Регистрация: 13.3.2011
Поблагодарили: 66 раз
Репутация:   18  


конечно не будет работать :)

т.к. meta_key не может одновременно быть и product_number и product_price, а meta_value - '%$keywords%' и >1000

первое что приходит щас на ум выбрать сначала ID по одному из запросов, потом из этих ID второй запрос...

1) SELECT post_id FROM postmeta WHERE meta_key = 'product_number' AND meta_value LIKE '%$keywords%'

2) SELECT post_id FROM postmeta WHERE post_id IN (тут_ID_из_результата_предыдущего_запроса) AND meta_key = 'product_price' AND meta_value > 1000

но это решение на коленке.. уверен можно оптимизировать этот запрос в один..


Поблагодарили: (1)
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
mmkulikov
mmkulikov
сообщение 20.11.2015, 12:39; Ответить: mmkulikov
Сообщение #4


Старожил
******

Группа: Active User
Сообщений: 2023
Регистрация: 21.9.2012
Из: СССР
Поблагодарили: 587 раз
Репутация:   68  


WhiteIce,
Код
SELECT post_id
FROM postmeta
WHERE
(meta_key = 'product_number'  AND  meta_value LIKE '%$keywords%' )
OR
(meta_key = 'product_price' AND meta_value > 1000)

Где-то так-с :pionertrava:


--------------------


Поблагодарили: (1)
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
WhiteIce
WhiteIce
Topic Starter сообщение 20.11.2015, 18:32; Ответить: WhiteIce
Сообщение #5


Участник
***

Группа: User
Сообщений: 128
Регистрация: 28.6.2013
Поблагодарили: 26 раз
Репутация:   5  


WebFox,
Пусто без скобок.

mmkulikov
Вариант с OR выбирает когда подходит хотя бы одно условия, а нужно когда оба

SpaceX
А вот ваш подошел - сделал вложенный запрос

Код
SELECT post_id
FROM postmeta
WHERE
post_id IN (
    SELECT post_id
    FROM postmeta
    WHERE
    meta_key = 'product_number'  AND  meta_value LIKE '%$keywords%'
    )                
AND
meta_key = 'product_price' AND meta_value > 1000


посмотрю еще как оптимизировать, может окажется удобней просто результаты первого (общего) запроса обработать в php


--------------------
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
Overlord99
Overlord99
сообщение 23.11.2015, 19:02; Ответить: Overlord99
Сообщение #6


Новичок
*

Группа: User
Сообщений: 19
Регистрация: 18.11.2015
Поблагодарили: 2 раза
Репутация:   0  


WhiteIce, если таблица postmeta большая, то вместо IN лучше воспользуйтесь EXISTS.


Поблагодарили: (1)
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
Открыть тему
Тема закрыта
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0


Свернуть

> Похожие темы

  Тема Ответов Автор Просмотров Последний ответ
Открытая тема (нет новых ответов) Как включить автоматическое обновление для плагинов WordPress и самого движка?
0 Telnor 342 Вчера, 13:27
автор: Telnor
Открытая тема (нет новых ответов) Адаптация сайтов под мобильные устройства, качественная кроссбраузерная верстка, работа с Wordpress
PSD to HTML, натяжка макетов на Wordpress, адаптивная верстка
28 anton_ber 5139 6.12.2017, 13:39
автор: anton_ber
Открытая тема (нет новых ответов) Пропали блоки в продуктах Wordpress
6 mxxx 936 6.12.2017, 11:22
автор: mxxx
Горячая тема (нет новых ответов) Услуги по CMS Wordpress, DLE, Joomla!. Правки, ремонт, настройка.
Редактирование и правки. Низкие цены.
142 contex1 64953 5.12.2017, 12:13
автор: contex1
Открытая тема (нет новых ответов) Перенос сайта с DLE на WordPress
3 mdobyshev 856 30.11.2017, 7:29
автор: Nell


 



RSS Текстовая версия Сейчас: 11.12.2017, 13:52
Дизайн