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

  • Автор темы Автор темы Marduk
  • Дата начала Дата начала

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 которым предписаны два эти слова
 
Если имелось ввиду

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%' - вот
 
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:

так никто не поможет? =(
 
если не можешь писать сразу такие большие и сложные запросы, то пиши их итеративно, шаг за шагом, чтобы понимать почему у тебя нет результатов и где собственно кроется проблема
 
Проблема решена:

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
 
ужас, больше слов нет ;)

ps: про COUNT мы даже и не слышали как я понял, да? ;)
 
вместо того чтобы изливать свои эмоции написал бы хоть строчку запроса
 
Marduk
вместо того, чтобы учить что и как делать, учились бы запросы писать нормально и не задававть глупые вопросы
 
Форум на то и форум чтобы задавать вопросы какие бы они не были, а не показывать всем собственную завышенную до небес самооценку.
 
может вместо ваших двух последних сообщений легче было написать куда же всё таки здесь деть count?

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