Разрабатываю контекстную сеть, возникла некоторая проблема.
Имеется такая база данных:
CREATE TABLE context (id MEDIUMINT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
uid MEDIUMINT UNSIGNED NOT NULL,
title VARCHAR(30) NOT NULL,
description VARCHAR(60) NOT NULL,
url VARCHAR(250) NOT NULL,
balance DECIMAL(8, 4) DEFAULT 0 NOT NULL,
createdAt DATETIME DEFAULT NOW() NOT NULL
);
И вторая нормализованная для проверок:
CREATE TABLE context_check (id MEDIUMINT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
task_id MEDIUMINT UNSIGNED NOT NULL,
ip VARCHAR(15) NOT NULL,
visited DATETIME DEFAULT NOW() NOT NULL
);
Когда кто-то переходит по контекстной ссылке, проверяется был ли переход в context_check основываясь на ip.
В php происходит выборка с базы данных:
$context = $DB->query("SELECT id, title, description FROM context WHERE balance >= 1 ORDER BY RAND() LIMIT 5")->fetchAll();
Но при такой выборке возникает проблема с фильтрацией ссылок которые пользователь уже посетил с его ip.
Короче говоря нужно выбрать 5 записей с базы context, кроме тех записей у которых ip = ip юзера и visited != null, но если записи в context_check вообще нет, то всё ровно выводить данные, такое не получается с inner join