вроде работает, но хочется чтобы вы проверили правильность решения. и да, мне неловко создавать очередной тред про очередной дурацкий вопрос, но разве можно как-то иначе?
имеем бложек. три таблицы, - посты, комментарии, связь между постами и комментариями.
$sq = new SQLite3('../db.sq3');
$sq->exec('CREATE TABLE IF NOT EXISTS blog_posts (
post_id INTEGER PRIMARY KEY, // ид поста (автоинкремент)
post_author INTEGER, // ид пользователя
post_datetime INTEGER, // дата создания
post_title TEXT, // заголовок
post_contents TEXT, // пост
post_intro TEXT // превью поста
)');
$sq->exec('CREATE TABLE IF NOT EXISTS blog_comments (
comment_id INTEGER PRIMARY KEY, // ид комментария (автоинкремент)
comment_author INTEGER, // ид пользователя
comment_datetime INTEGER, // дата создания
comment_contents TEXT // комментарий
)');
$sq->exec('CREATE TABLE IF NOT EXISTS blog_entries (
post_id INTEGER, // ид поста
comment_id INTEGER, // ид комментария
entry_ip TEXT, // айпи
entry_ua TEXT // юзер агент
)');
посты лежат отдельно, комментарии отдельно, и таблица связующая комментарии с постами - тоже отдельно.
то есть, если мы хотим вывести все комментарии к посту, то сперва мы выберем id комментариев к нужному посту, а затем уже выберем все комментарии по этим id.
$stmt = $sq->prepare('SELECT comment_contents FROM blog_comments WHERE comment_id IN (SELECT comment_id FROM blog_entries WHERE post_id = :id)');
$stmt->bindValue(':id', $_GET['id'], SQLITE3_INTEGER);
$exec = $stmt->execute();
while ($row = $exec->fetchArray()) {
print_r($row);
}
$sq->close();
похоже, что оно работает. для теста я записал 2 комментария в базу и на выхлопе получаю их самых.
Array ( [0] => note one [comment_contents] => note one )
Array ( [0] => note two [comment_contents] => note two )
все правильно сделал? и не нужно никаких join'ов (которые все ругают)?