select из таблиц многие к многим

Marduk

Новичок
select из таблиц многие к многим

есть две таблицы
table1: id, table2_id, count
table2: table2_id, word

нужно осуществить два способа выборки:
1. все id (table1) у которых word LIKE '%word1%' AND word '%word2%'
2. все id у которых word LIKE '%word1%' OR word LIKE '%word2%'
+ вычислять сумму count

запрос

SELECT table1.id, SUM(table1.count) as sum
FROM table1
INNER JOIN table2 ON (table2.id=table1.table2_id)
WHERE table2.word LIKE '%word1%' OR '%word2%'
GROUP BY table1.id
ORDER BY sum DESC

возвращает id элементов которым предписано либо слово 1 либо 2.
нужно же чтобы возвращались id которым предписаны два эти слова
 

Marduk

Новичок
Если имелось ввиду

SELECT table1.id, SUM(table1.count) as sum
FROM table1
INNER JOIN table2 ON (table2.id=table1.table2_id)
WHERE table2.word LIKE '%word1%' AND '%word2%'
GROUP BY table1.id
ORDER BY sum DESC

то он не выдаёт результатов вообще
 

Барби

Новичок
ну если запрос и список полей ты приводишь реальные, то странно что первый запрос что то выдавал.
не вижу в описани полей table2 такова table2.id и поменяй inner join на left join

да и слона я тоже не приметил:
WHERE table2.word LIKE '%word1%' AND '%word2%' - не верно
WHERE table2.word LIKE '%word1%' AND table2.word LIKE '%word2%' - вот
 

Marduk

Новичок
SELECT table1.id, SUM(table1.count) as sum
FROM table1
LEFT JOIN table2 ON (table2.id=table1.table2_id)
WHERE table2.word LIKE '%word1%' AND table2.word LIKE '%word2%'
GROUP BY table1.id
ORDER BY sum DESC

не выдаёт результатов, видимо тк для одной записи из table1 не может выполняться условие table2.word LIKE '%word1%' AND table2.word LIKE '%word2%'

думаю нужно как-то изменить запрос, но как... =/

-~{}~ 13.06.06 10:14:

так никто не поможет? =(
 

zerkms

TDD infected
Команда форума
если не можешь писать сразу такие большие и сложные запросы, то пиши их итеративно, шаг за шагом, чтобы понимать почему у тебя нет результатов и где собственно кроется проблема
 

Marduk

Новичок
Проблема решена:

SELECT table1.id, SUM(table1.count) as `sum`,
sum(if(table2.word LIKE '%word1%',1,0)) as word1match,
sum(if(table2.word LIKE '%word2%',1,0)) as word2match
FROM table1
INNER JOIN table2 ON (table2.id=table1.table2_id)
WHERE table2.word LIKE '%word1%' OR '%word2%'
GROUP BY table1.id
ORDER BY `sum` DESC having word1match>0 and word2match>0
 

zerkms

TDD infected
Команда форума
ужас, больше слов нет ;)

ps: про COUNT мы даже и не слышали как я понял, да? ;)
 

Marduk

Новичок
вместо того чтобы изливать свои эмоции написал бы хоть строчку запроса
 

zerkms

TDD infected
Команда форума
Marduk
вместо того, чтобы учить что и как делать, учились бы запросы писать нормально и не задававть глупые вопросы
 

Marduk

Новичок
Форум на то и форум чтобы задавать вопросы какие бы они не были, а не показывать всем собственную завышенную до небес самооценку.
 

Marduk

Новичок
может вместо ваших двух последних сообщений легче было написать куда же всё таки здесь деть count?

хотя судя по вашему первому сообщению "and" я вряд ли могу расчитывать на что-либо компетентное
 

zerkms

TDD infected
Команда форума
может тогда полнотекстовый поиск попробовать?
 
Сверху