Нужна помощь.. Есть таблица пользователей. Есть таблица заданий. Каждый пользователь должен выполнить все задания. Вопрос: как отмечать выполнение заданий для каждого отдельного пользователя? Создавать в таблице юзеров для каждого задания столбик и там отмечать - глупо, да и запросов куча... Посоветуйте как реализовать..
Это самый простой и самый надежный вариант. Важно понимать, что в этой таблице ты хранишь только id пользователя и задания. Вся информация о пользователе или задании хранится в соответсТвующих таблицах пользователей и заданий. А тут ты можешь дополнительно хранить информацию именно о связи. Т.е. завершено/незавершено плюс еще ряд каких-то признаков, т.е. дата начала, дата окончания.
А не сильно много записей будет в таблице? И юзеру выводятся только неполненные задания - тоесть это надо будет пробивать таблицу из N записей выполнено ли каждое задание. Потом обращатся к таблице с заданиями.. Может что то другое можно предложить?
1. Используй JOIN Все невыполненные задания по пользователю или даже группе пользователей будут получаться 1м запросом. 2. Пока у тебя речь не идет о 100т пользователей с 100т заданий у каждого можешь смело игнорировать число записей в таблице. Главное правильно составляй запросы. А когда у тебя появятся такие нагрузки, у тебя уже будет опыт как с ними справлятся.
Simpliest а можно на примере запрос, а то я с JOIN нуб.. не юзал вообще.. И еще: как таблицу создавать с user_id, task_id... Раз в сутки генерировать новую таблицу со всеми строками? Я сильно запутался...
[sql]SELECT * FROM table1 JOIN table2 ON table1.field = table2.field WHERE table1.field1 IN (1,2,3) OR table2.someotherfield = 1[/sql]
У меня вышло что то такое: $session = Validate::ValidateInfo($_SESSION['session'], 50, TRUE); $sql = mysql_query("SELECT id FROM users WHERE session = '$session' LIMIT 1"); $info = mysql_fetch_array($sql); $sql = mysql_query("SELECT * FROM users, tasks WHERE users.id=tasks.user_id AND tasks.user_id = $info[0]"); Пойдет так? Или что то лишнее?
И еще: как таблицу создавать с user_id, task_id... Раз в сутки генерировать новую таблицу со всеми заданиями для каждого юзера и обновлять статусы заданий?
Ну вообщем так: вариант с структурой таблицы от Simpliest подошел. Тоесть таблица будет вида - user_id, task_id, status И по-умолчанию будет содержать данные: 36, 1, 0; 36, 2, 0; 36, 3, 0; 36, 4, 0; и тп и тд для каждого юзера.. После выполнения какого то задания status в таблице меняется на 1. Пользователь каждое задание может выполнять раз в сутки!!! Выходит что мне надо в этой таблице раз в сутки обновлять status на 0 для каждого юзера и задания? Правильно или что то не то?)))
Andrey5555 именно раз в 24 часа или вариант типа 10.11.12 23:59:59 11.11.12 00:00:26 прокатывает? если прокатывает и статистику хранить не надо - то можно в 00:00:00 по cron'у запускать скрипт, который сбрасывает все статусы в 0.