powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Сложный запрос к БД MySQL
14 сообщений из 14, страница 1 из 1
Сложный запрос к БД MySQL
    #38970771
viktorminator
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
привет повелители баз

Есть Таблица БД http://sqlfiddle.com/#!2/edf42
[img=]
Делаю фильтр по полям в бекэнде
Нужно отфильтровать значения

Код: plsql
1.
SELECT `contentid` FROM `modx_site_tmplvar_contentvalues` WHERE (`tmplvarid` =4 AND `value` = 'residential')


и сделать пересечение с этой же таблицей с другими значениями

Код: plsql
1.
SELECT `contentid` FROM `modx_site_tmplvar_contentvalues` WHERE (`tmplvarid` =17 AND `value` LIKE '%San Diego%')


всё в одном запросе. Как сделать? Спасибо
...
Рейтинг: 0 / 0
Сложный запрос к БД MySQL
    #38970786
viktorminator,

Self Join + алиасы для каждой версии таблицы
...
Рейтинг: 0 / 0
Сложный запрос к БД MySQL
    #38970789
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
viktorminator,

один из индексов :

Код: sql
1.
2.
  KEY `tmplvarid` (`tmplvarid`),
  KEY `tv_cnt` (`tmplvarid`,`contentid`)



лишний. В принципе, тот, который несоставной.
...
Рейтинг: 0 / 0
Сложный запрос к БД MySQL
    #38970790
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
viktorminatorвсё в одном запросе. Как сделать? Спасибо

JOIN ...
...
Рейтинг: 0 / 0
Сложный запрос к БД MySQL
    #38970796
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
viktorminator,

На самом деле тебе нужно эту таблицу иметь в виде:

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
CREATE TABLE modx_site_tmplvar_contentvalues (
  `tmplvarid` int(10) NOT NULL DEFAULT '0',
  `contentid` int(10) NOT NULL DEFAULT '0',
  `value` mediumtext NOT NULL,
  PRIMARY KEY (tmplvarid,contentid),
  KEY `contentid` (`contentid`),
  KEY `xxx` (`tmplvarid`,`value`)
);
...
Рейтинг: 0 / 0
Сложный запрос к БД MySQL
    #38970813
Фотография Alex_Ustinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: sql
1.
SELECT `contentid` FROM `modx_site_tmplvar_contentvalues` WHERE (`tmplvarid` =17 AND `value` LIKE '%San Diego%') OR (`tmplvarid` =17 AND `value` LIKE '%San Diego%')

а так не работает? ..................... или UNION???
...
Рейтинг: 0 / 0
Сложный запрос к БД MySQL
    #38970849
viktorminator
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Alex_Ustinov
Код: sql
1.
SELECT `contentid` FROM `modx_site_tmplvar_contentvalues` WHERE (`tmplvarid` =17 AND `value` LIKE '%San Diego%') OR (`tmplvarid` =17 AND `value` LIKE '%San Diego%')

а так не работает? ..................... или UNION???
Нет, вы немного не то написали, и это всё равно "объединение", а нужно найти contentid, для которого соблюдаются оба условия ОДНОВРЕМЕННО
Код: plsql
1.
SELECT * FROM `modx_site_tmplvar_contentvalues` WHERE (`tmplvarid` =4 AND `value` = 'commercial') AND (`tmplvarid` =17 AND `value` LIKE '%San Diego%')


типа такого, но это не правильный тоже вызов... :). Проверяю остальные подсказки...
...
Рейтинг: 0 / 0
Сложный запрос к БД MySQL
    #38970858
viktorminator
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый Э - Эх, спасибо за подсказку - вроде то, что нужно.

MasterZiv, спасибо, таблицу менять не могу - это CMS
...
Рейтинг: 0 / 0
Сложный запрос к БД MySQL
    #38970907
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
viktorminatorДобрый Э - Эх, спасибо за подсказку - вроде то, что нужно.

MasterZiv, спасибо, таблицу менять не могу - это CMS

Даже если это так, ты можешь создать нужный тебе индекс, а лишний(лишние) -- удалить.
Не удаляй только констрейнты (PK, unique, foreign).
...
Рейтинг: 0 / 0
Сложный запрос к БД MySQL
    #38970944
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А можно полюбопытствовать, фигли во втором запросе используется `value` LIKE '%San Diego%' , а не `value`= '%San Diego%' ? Это принципиально?
...
Рейтинг: 0 / 0
Сложный запрос к БД MySQL
    #38970955
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AkinaА можно полюбопытствовать, фигли во втором запросе используется `value` LIKE '%San Diego%' , а не `value`= '%San Diego%' ? Это принципиально?
а есть меж ними принципиальная разница?
...
Рейтинг: 0 / 0
Сложный запрос к БД MySQL
    #38970961
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Пардон, имелось в виду

`value`= 'San Diego'

Просто так офигел, что забыл удалить проценты...
...
Рейтинг: 0 / 0
Сложный запрос к БД MySQL
    #38971176
viktorminator,

SELECT contentid FROM modx_site_tmplvar_contentvalues WHERE tmplvarid=4 OR tmplvarid=17
...
Рейтинг: 0 / 0
Сложный запрос к БД MySQL
    #38971271
viktorminator
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: sql
1.
2.
3.
4.
5.
SELECT *
FROM `modx_site_tmplvar_contentvalues`
WHERE `tmplvarid` = 4 AND `value` = 'residential'
AND `contentid` IN ( SELECT `contentid` FROM `modx_site_tmplvar_contentvalues` WHERE `tmplvarid` =17 AND `value` LIKE 'San Diego')
AND `contentid` IN ( SELECT `contentid` FROM `modx_site_tmplvar_contentvalues` WHERE `tmplvarid` =8 AND `value` = '92115')


Вот так вроде решил эту задачу, в лоб тупо и мощно, почему не SELF JOIN & INNER JOIN?
Потому что 1) не умею 2) по логике нужно склеивать следующий запрос к основному, по типу

Код: php
1.
$sql .= ....;
...
Рейтинг: 0 / 0
14 сообщений из 14, страница 1 из 1
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Сложный запрос к БД MySQL
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]