Dziękuję za pomoc, skorzystam z podzapytań

być może z czasem przerzucę się na dodatkową kolumnę, zobaczymy co życie pokaże
mam jeszcze jedno pytanie odnośnie optymalizacji zapytań na ww. bazy danych. mam więc następujące tabele w bazie:
love_authorsID, NAME_FIRST, NAME_LAST, NAME_PREFIX, NAME_URL, MAIL, DESCRIPTION, IMAGE, STATUS
love_lyricsID, AUTHOR_ID, TITLE
love_tagsID, ID_PAGE, TAG_URL, TAG_VAL
mam jakiś wiersz na stronie. chciałbym, by z powyższych tabel zostały pobrane podobne wiersze, np. 5 tekstów tego samego autora i 5 tekstów z tych samych tagów.
dotychczas robię dwa połączenia - pobieram 5 tagów i 5 tekstów tego samego autora, po czym łącze wszystko w jedną tablicę i obcinam z najbardziej trafnymi wynikami:
<?php
// zdefiniowanie zmiennej przechowującej all materiały
$all_related_stuff = array();
if ($author_id) {
// pobranie rekordów tego samego autora
SELECT
wiersz.ID AS WIERSZ_ID,
wiersz.TITLE AS WIERSZ_TYTUL,
wiersz.LINK_TITLE AS WIERSZ_URL,
wiersz.LANGUAGE AS WIERSZ_LANG,
CONCAT(autor.NAME_FIRST, ' ', autor.NAME_LAST) AS AUTHOR_NAME,
autor.NAME_PREFIX AS AUTHOR_NICK
FROM
".get_array('tables', 'wiersze')." AS wiersz,
".get_array('tables', 'autorzy')." AS autor
WHERE
wiersz.STATUS = 1
AND wiersz.ID <> '$current_id'
AND wiersz.AUTHOR_ID = '$author_id'
AND wiersz.AUTHOR_ID = autor.ID
LIMIT 10");
if (@mysql_num_rows($get_lyrics_cnt) > 0)
while ($get_text = mysql_fetch_assoc($get_lyrics_cnt)) {
$AUTHOR_NAME = !empty($get_text['AUTHOR_NAME']) ? $get_text['AUTHOR_NAME'] : $get_text['AUTHOR_NICK'];
$all_related_stuff[$get_text['WIERSZ_URL']] = array($get_text['WIERSZ_ID'], $get_text['WIERSZ_TYTUL'], $get_text['WIERSZ_URL'], catch_data($AUTHOR_NAME, false), $get_text['WIERSZ_LANG']);
}
// pobranie rekordów o tych samych tagach
$get_tags_cnt = mysql_query(\"
SELECT
wiersz.ID AS WIERSZ_ID,
wiersz.TITLE AS WIERSZ_TYTUL,
wiersz.LINK_TITLE AS WIERSZ_URL,
wiersz.LANGUAGE AS WIERSZ_LANG,
CONCAT(autor.NAME_FIRST, ' ', autor.NAME_LAST) AS AUTHOR_NAME,
autor.NAME_PREFIX AS AUTHOR_NICK
FROM
".get_array('tables', 'wiersze')." AS wiersz,
".get_array('tables', 'tagi')." AS tag,
".get_array('tables', 'autorzy')." AS autor
WHERE
wiersz.STATUS = 1
AND tag.CAT_ID = '$cat_ide'
AND wiersz.TAGS_ID = tag.ID_PAGE
AND wiersz.ID <> '$current_id'
AND wiersz.AUTHOR_ID = autor.ID
GROUP BY wiersz.TAGS_ID
ORDER BY RAND()
LIMIT 10");
$AUTHOR_NAME = !empty($get_text['AUTHOR_NAME']) ?
$get_text['AUTHOR_NAME'] : $get_text['AUTHOR_NICK']; $all_related_stuff[$get_text['WIERSZ_URL']] = array($get_text['WIERSZ_ID'], $get_text['WIERSZ_TYTUL'], $get_text['WIERSZ_URL'], catch_data
($AUTHOR_NAME, false), $get_text['WIERSZ_LANG']); }
// jeśli istnieją podobych materiały, wyświetlenie ich na stronie
if (count($all_related_stuff) > 0
) {
$related_template = array(); $related_template['item_list'] = null;
// obcięcie liczby przechowywanych linków do 10
foreach ($all_related_stuff as $related_stuff => $related_item) {
$set_link['link_url'] = create_link
('milosny_wiersz', array('id' => $related_item[0], 'n' => $related_stuff)); $set_link['link_text'] = catch_data($related_item[3], false) .' - '. catch_data($related_item[1], false);
$set_link['link_lang'] = $related_item[4];
$set_link['cat_url'] = create_link ('milosne_wiersze');
$set_link['cat_txt'] = 'Miłosna liryka i wiersze';
$related_template['item_list'] .= template('related_links_item', $set_link, 1);
}
return template('related_links', $related_template, 1);
}
}
?>
Czy mógłbym wykonać to jakoś bardziej przemyślanie? Jestem w trakcie czytania świetnej książki o MySQL (
Paul DoBois 'MySQL'), lecz dopiero zaczynam tę lekturę i słaby jestem