Помогите составить запрос (схему БД прилагаю)

  • Автор темы Олег2005
  • Дата начала

Олег2005

Guest
Помогите составить запрос (схему БД прилагаю)

Ребята, помогите составить такой запрос

Выбрать записи из С при A1.id = param1 и T.id=param2, если С.поле = значение.

MySQL 4.0.18




-~{}~ 13.01.05 10:01:

Сорри, схема здесь:

http://e-dacha.narod.ru/1.jpg
 

asm

Пофигист
SELECT * FROM a1, t, c, ct WHERE a1.id = 'parm' AND t.id = 'param' AND c.colname = 'value' AND t.id = ct.id AND c.id=ct.id
 

Олег2005

Guest
уф... чего то я сомневаюсь, что можно вот так просто намешать в Where. Неизвестно, что в какой последовательности будет обрабатываться. Вообще, мне посоветовали сделать 3 (!) запроса. Видимо, не все так просто.
 

Олег2005

Guest
спасибо, попробую, расскажу

-~{}~ 14.01.05 16:35:

ребята, а еще варианты может кто-нибудь предложить?
 

alexhemp

Новичок
Используй INNER JOIN - нагляднее будет

Т.е.

SELECT * FROM С

INNER JOIN CA ON (C.ключ=CA.внешний ключ)
INNER JOIN A4 ON (CА.ключ=A4.внешний ключ)
INNER JOIN A3 ON (A4.ключ=A3.внешний ключ)
INNER JOIN A2 ON (A3.ключ=A2.внешний ключ)
INNER JOIN A1 ON (A2.ключ=A1.внешний ключ)

INNER JOIN CT ON (CT.ключ=C.внешний ключ)
INNER JOIN T ON (T.ключ=CT.внешний ключ)

WHERE A1.id = param1 AND T.id=param2 AND С.поле=значение

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

Задача стандартная. Через WHERE тоже можно, но только легко забыть поставить условие и получить декартово произведение. JOIN-ы полегче для отладки сложных запросов, когда таблиц много.
 

Олег2005

Guest
alexhemp, спасибо, все ОК.
Мое искреннее почтение.

Олег

-~{}~ 17.01.05 10:22:

Да, вот еще незадача.
В этот запрос я добавил DISTINCT.
Попробовал организовать постраничный вывод записей, применил LIMIT, появляется ошибка "Unable to jump to record #". В чем может быть дело?
 

alexhemp

Новичок
Олег2005

А ты запрос покажи целиком. Может ты LIMIT неверно написал.
 

Олег2005

Guest
Запрос без LIMIT работает.


LIMIT n,m

обычно написал...

-~{}~ 17.01.05 20:41:

$c = mysql_query("
SELECT DISTINCT * FROM concept
INNER JOIN f_concept ON (concept.id = f_concept.concept)
INNER JOIN fragment ON (fragment.id = f_concept.fragment)
INNER JOIN part ON (part.id = fragment.part)
INNER JOIN book ON (book.id = part.book)
INNER JOIN author ON (author.id = book.author)
INNER JOIN c_tema ON (concept.id = c_tema.concept)
INNER JOIN tema ON (tema.id = c_tema.tema)
{$condition}
ORDER BY concept.header
LIMIT {$from}, {$nl}
", $link);

Результат:
-------------

Warning: mysql_result(): Unable to jump to row 3 on MySQL result index 6 in D:\WWW\select.php on line 153

Warning: mysql_result(): Unable to jump to row 3 on MySQL result index 6 in D:\WWW\select.php on line 155

Warning: mysql_result(): Unable to jump to row 3 on MySQL result index 6 in D:\WWW\select.php on line 157

Warning: mysql_result(): Unable to jump to row 3 on MySQL result index 6 in D:\WWW\select.php on line 159

Warning: mysql_result(): Unable to jump to row 3 on MySQL result index 6 in D:\WWW\select.php on line 162

Warning: mysql_result(): Unable to jump to row 3 on MySQL result index 6 in D:\WWW\select.php on line 162

-~{}~ 17.01.05 21:26:

------------------------

ОТБОЙ, все получилось. Дело не в запросе.
 
Сверху