Задавайте вопросы, мы ответим
Вы не зашли.
Здравствуйте!
Я в основном программист и не очень хорошо знаю MYSQL, чтобы создать такой сложный запрос
Имеются несколько таблиц
Первая таблица a
------------------------------------------------
id | category | user | firma | status
------------------------------------------------
5 | 1 | 6 | 2 | 1
-------------------------------------------------
Вторая таблица b
--------------------------
id | ad_id | field_id
--------------------------
1 | 5 | 15
--------------------------
2 | 5 | 12
--------------------------
Третья таблица c
------------------------------------------------
id | category | name | status
------------------------------------------------
13 1 subcategory 1
12 1 email 1
14 1 region 1
15 1 theme 1
16 1 name 1
17 1 circulation 1
18 1 language 1
19 1 age 1
20 1 format 1
21 1 amount_color 1
22 1 amount_black_white 1
23 1 returns 1
24 1 homepage 1
-------------------------------------------------
И четвертая таблица d
-----------------------------------------------------------------------
id | adfield_id | language | key | value
-----------------------------------------------------------------------
20 | 24 | ru | русский | русский
21 25 ru 25 25
22 26 ru A4 A4
23 27 ru 10 10
24 28 ru 30 30
Я не знаю сколько полей будет в конечном итоге,потому будет возможность добавлять новые поля. Также я не знаю сколько языков будет в конечном резуьтате - тоже будет возможность добавлять новые. Получаются таблицы с key и value. Теперь мне надо получить из таблицы a все возможные уникальные записи, которые бы содержали несколько полей в таблице d. То есть если поле имеет имя одно и значение другое и еще поле другое и значение. И только ЕСЛИ ОБА УСЛОВИЯ совпадают, то выдает из таблицы a одну строчку. Приведенный ниже пример выдает мне стоблцы из таблиц, но это не то..
SELECT `a`.`id`, `a`.`category`, `a`.`user`, `a`.`firma`, `b`.`field_id`, `c`.`name`, `d`.`value` FROM `advertising` AS `a` INNER JOIN `adfields` AS `b` ON a.id = b.ad_id INNER JOIN `fields` AS `c` ON b.field_id=c.id INNER JOIN `adfields_translations` AS `d` ON b.id=d.adfield_id WHERE (c.name = 'email' AND d.value = 'test@mail.ru') OR (c.name = "name" AND d.value = 'rannik')
Как сделать в mysql чтобы он отсеил из таблицы a строки, в которых не все условия выполняются? Извиняюсь за столь сумбурное изложение - вроде все понятно, но при попытке все это озвучить оказалось все не так легко
Неактивен
В том запросе, который Вы написали есть объединение b.id с d.adfield_id. Судя по
данным, которые Вы привели, таких строк нет, поэтому Вы и получаете пустую
выборку.
Неактивен