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



 

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

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


Участник
***

Группа: User
Сообщений: 132
Регистрация: 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
Сообщений: 2117
Регистрация: 21.9.2012
Из: СССР
Поблагодарили: 610 раз
Репутация:   70  


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
Сообщений: 132
Регистрация: 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.

Замечание модератора:
Эта тема была закрыта автоматически ввиду отсутствия активности в ней на протяжении 100+ дней.
Если Вы считаете ее актуальной и хотите оставить сообщение, то воспользуйтесь кнопкой
или обратитесь к любому из модераторов.


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


Свернуть

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

  Тема Ответов Автор Просмотров Последний ответ
Открытая тема (нет новых ответов) Верстка + натяжка на CMS WordPress, OpenCart
1 Chezarius 252 Вчера, 18:42
автор: Chezarius
Горячая тема (нет новых ответов) Услуги по CMS Wordpress, DLE, Joomla!. Правки, ремонт, настройка.
Редактирование и правки. Низкие цены.
156 contex1 70806 22.5.2018, 0:06
автор: AnnaProf
Открытая тема (нет новых ответов) Удаляю вирусы на CMS WordPress. Чищу качественно и быстро, даю гарантию.
10 maxix 1148 21.5.2018, 16:59
автор: maxix
Открытая тема (нет новых ответов) Тема имеет прикрепленные файлыСайт о Туризме Wordpress
4 tbr82 667 19.5.2018, 19:53
автор: 1da1
Открытая тема (нет новых ответов) Русификация шаблонов и плагинов WordPress
0 Dizer7 245 18.5.2018, 17:35
автор: Dizer7


 



RSS Текстовая версия Сейчас: 24.5.2018, 2:58
Дизайн