PHP MYSQL Определить, добавлена ​​ли новая строка

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

Я думал об идентификации через поле date_added.

id    client_name     date_added
---------------------------------
1     ABC             2013-01-02
2     XYZ             2013-01-03 
3     EFG             2013-01-02
4     HIJ             2013-01-05

Как видите, новый клиент добавил HIJ 2013-01-05.

Я искал с таким результатом:

Client List
Total NO: 4
New Client
Total No: 1
Client Name: HIJ

4 ответа

Решение

Трудно сказать, но на основании вашего комментария ... моя контрольная дата - интервал в 1 месяц... вы можете искать что-то вроде этого

SELECT id, client_name, new_count, total_count
  FROM
(
  SELECT id, client_name
    FROM clients
   WHERE date_added BETWEEN CURDATE() - INTERVAL 1 MONTH AND CURDATE()
) c CROSS JOIN
(
  SELECT 
  (
    SELECT COUNT(*) new_count
        FROM clients
         WHERE date_added BETWEEN CURDATE() - INTERVAL 1 MONTH AND CURDATE()
  ) new_count,
  (
    SELECT COUNT(*) total_count
        FROM clients
  ) total_count
) t 

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

Предположим, что у вас есть следующие данные образца

+ ------ + ------------- + ------------ +
| id | имя_клиента | date_added |
+------+-------------+------------+
|    1 | ABC         | 2013-05-13 |
|    2 | XYZ         | 2013-06-13 |
|    3 | EFG         | 2013-06-13 |
|    4 | HIJ         | 2013-08-11 |
+------+-------------+------------+

и сегодня 2013-08-13 тогда результат запроса будет

+ ------ + ------------- + ----------- + ------------- +
| id | имя_клиента | new_count | total_count |
+------+-------------+-----------+-------------+
|    4 | HIJ         |         1 |           4 |
+------+-------------+-----------+-------------+

Добавить поле new к таблице, по умолчанию это 1, при загрузке страницы используйте это для выбора и установите его в 0, чтобы указать, что он больше не новый.

Это зависит от того, что вы считаете НОВЫМ. Вы должны определить, с чем вы собираетесь сравнивать записи (контрольная дата). Определив его, вы можете использовать запрос, подобный следующему:

SELECT * FROM клиента, ГДЕ date_added >= '$date'

где $ date - это ссылочная дата.

На вашей веб-странице или в PHP-скрипте вы можете вспомнить самое высокое значение идентификатора, которое вы видели раньше. Или самая высокая отметка времени (лучше, чем дата), которую вы видели раньше.

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

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

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

Другие вопросы по тегам