выборка записей из таблицы 1 соответствующих записям в таблице 2

desperado

Новичок
выборка записей из таблицы 1 соответствующих записям в таблице 2

вобщем тут тема такая. есть две таблицы (ну скажем список авторов [tbl_auth] и список книг [tbl_books]).

структура tbl_auth:

aid int(11) NOT NULL auto_increment //id автора
name varchar(255) NOT NULL default '' //имя автора.

структура tbl_books:

bid int(11) NOT NULL auto_increment //id книги
aid varchar(255) NOT NULL default '' //id автора
cid varchar(255) NOT NULL default '' //id раздела
name varchar(255) NOT NULL default '' //название книги

- в таблице tbl_books ид авторов лежат в виде |1|2|...|n|
- в таблице tbl_books ид разделов лежат в виде |1|2|...|n|
--------------------------

суть следущая - выбрать всех (неповторяясь) авторов из tbl_auth, которым соответствуют книги из tbl_books, которые мы выбираем по полю tbl_books.cid, и, если можно без крови, попутно подсчитать количество книг, желательно одним запросом.

за ранее благодарен. если что-то не понятно - поясню.

то модерззз...
сказать РТФМ легко, особенно если сам не знаешь :) :)
 

tony2001

TeaM PHPClub
Демиург уже сказал:
ТРИ таблицы.
1) книги
2) авторы
3) записи вида книга | автор, т. е. связь между книгами и авторами
таким образом реализуются связи многие-ко-многим.

и не надо ломиться в приват и что-то требовать - правила надо выполнять.
 

desperado

Новичок
Автор оригинала: tony2001
Демиург уже сказал:
ТРИ таблицы.
1) книги
2) авторы
3) записи вида книга | автор, т. е. связь между книгами и авторами
таким образом реализуются связи многие-ко-многим.

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

Romantik

TeaM PHPClub
вроде так:
PHP:
SELECT DISTINCT tbl_auth.name FROM tbl_auth INNER JOIN tbl_books ON tbl_auth.id=tbl_books.aid AND tbl_books.cid=$param
 

tony2001

TeaM PHPClub
>прикольно, вот только связъ между книга-автор у меня в двух таблицах. в
>самой таблице книг она и реализована.
>вопрос надо читать внимательней.
ты ответ читаешь?
переделать надо структуру базы.
храни хоть все в одной - нам-то что?
 

tony2001

TeaM PHPClub
Romantik:
авторов несколько и "в таблице tbl_books ид авторов лежат в виде |1|2|...|n|".
 

desperado

Новичок
Автор оригинала: Romantik
вроде так:
PHP:
SELECT DISTINCT tbl_auth.name FROM tbl_auth INNER JOIN tbl_books ON tbl_auth.id=tbl_books.aid AND tbl_books.cid=$param
все бы прошло изящно и великолепно, если бы поля tbl_auth.aid && tbl_books.aid имели одну и ту же структуру.

в данной ситуации

tbl_auth.aid - просто интеджер
tbl_books.aid - варчар где значения в виде |1|2|...|n|
 

Romantik

TeaM PHPClub
Сорри, я протормозил с типом поля.
to desperado:
Задумайся, зачем делать сразу неверно?
А если тебе еще что-то понадобиться? Опять извращатся?
 

Demiurg

Guest
desperado, даже если удастся сделать такой запрос, в чем я сильно сомневаюсь, он будет тормозить так, что тебя уволят с работы до того, как он закончит выполняться.
 

desperado

Новичок
ладненько, будем делать с двумя табличками.

з.ы.
а как вы говорите нужно делать уже в пять таблицы

1 - авторы
2 - книги
3 - авторы <-> книги
4 - авторы <-> разделы
5 - книги <-> разделы

з.з.ы

себя я как-то уволить могу, но тгда придеться вешаться
 

.des.

Поставил пиво кому надо ;-)
desperado почему бы не прочитать какую нибудь книгу по основам проектирования БД?

PHP:
SELECT A.name,count(*) 
FROM tbl_auth A, tbl_books B
WHERE 
      LOCATE(CONCAT('|',A.aid,'|'),B.aid))>0  AND
      B.cid=".$param."
GROUP BY 1;
Но я бы сам себя уволил за такой запрос.

А насчет наездов на модераторов! - Все Темы с названием "Интересный запросик" записывай себе в ежедневник .. а потом когда надо будет найти, что то конкретное и себя в них ткнуть.. расскажешь сколько заняло у тебя это времени..
 

desperado

Новичок
читать это одно, но когда уже готовая база (чужая), то приходиться работать в узких рамках
 

Demiurg

Guest
а как вы говорите нужно делать уже в пять таблицы
1 - авторы
2 - книги
3 - авторы <-> книги
4 - авторы <-> разделы
5 - книги <-> разделы
так и надо.
 

desperado

Новичок
для себя без вопроса, результатвиность повысится, а объем увеличется, а вот объем незначительно (по сравнению с эфективностью). я не спорю...
 

Demiurg

Guest
на счет так и надо, я поторомился. Одна из связок тебе скорее не нужна.
 

desperado

Новичок
ну есть вариант
автор <-> раздел
книга <-> автор <-> раздел.

главное что бы была выборка как авторов по разделам, так и книг по разделам. ну и само себе книги по авторам.

просто сперва у них не было (меня), и нужды выборки авторов по разделам. а так им править всю систему к которой завязаны регионы россии не хотца (это типа им нуно ужо новый софт делать и тиражировать).

а вообще как всегда, я предложил - им понравилось, и тут я попал.... %)

дык еще базу этих книг заапгредить гимор, всегда с ней работают.
 

Demiurg

Guest
книга <-> автор и книга <-> раздел помоему должны быть самое то, если у тебя каталог книг.
 

desperado

Новичок
думаю останавлюсь на варианте
tbl1: автор | раздел | кол-во книг
tbl2: книга | раздел | автор

имхож все потребности уйдут в выборку по одной таблице, цеж меньше времени на запрос. а вобще надо будет потестить скорость
 

.des.

Поставил пиво кому надо ;-)
Мда.... о чем говорилось выше.. благопулочно было похерено ленью... и не желанием учиться правильным методам.
 

Demiurg

Guest
У тебя данные дублируются, может возникнуть несогласованность.
Время запроса уменьшается по другому.
 
Сверху