MySQL / PHP обрабатывает запрос справки - PullRequest
0 голосов
/ 19 января 2009

Хорошо, у меня есть две таблицы, к которым я присоединяюсь и делаю выбор, чтобы вернуть три поля (timestamp, message и articleNum). Теперь эти данные в основном представляют собой журнал того, когда статья была создана и изменена, я должен написать логику для обработки тех трех полей, которые я получил. Чтобы выяснить, когда статья была создана и / или изменена последней, мне нужно просмотреть сообщение и найти ключевые слова («добавлено» для созданного и «обновлено» для измененного). У меня есть результаты запроса обратно в массиве ассоциаций, и я хотел бы, чтобы конечный результат был в массиве ассоциаций с ключом articleNum, а ключом - массив двух значений (созданный, измененный). Иногда, хотя, не всегда будет измененное значение, но всегда будет созданное. Любая идея о том, как я мог бы начать такую ​​проблему?

EDIT Из того, что я могу сказать, похоже, что дата хранится в виде Bigint в секундах Unix. Пояснение: созданные и измененные значения не являются полями из таблицы, мне нужно выяснить это из поля сообщения. Всегда будет добавлено одно время, но иногда может быть 0 или более обновленных сообщений, и мне нужно выяснить последние.

РЕДАКТИРОВАТЬ 2 Хорошо, извините за формулировку вопроса. Посмотрев на проблему немного дольше, я понял, что могу сделать все это в двух операторах SQL. Для нахождения добавленной даты я использовал:

"SELECT MIN(action_logs.time_added), article.number
 FROM action_logs
 JOIN proposal ON action_logs.article_num = article.number
 WHERE action_logs.message LIKE '%added%'
 GROUP BY article.number"

Возможно, может сделать то же самое для последнего изменения, кроме как с MAX. Спасибо за предложения, хотя.

Ответы [ 4 ]

2 голосов
/ 19 января 2009

Это плохо сформулированный вопрос. Пахнет немного это

Какие две таблицы? Что такое поле сообщения? Предположительно события?

Почему бы вам просто не «создать» и «обновить» в таблицах статей?

Вы уверены, что ваш дизайн звучит?

0 голосов
/ 19 января 2009

Попробуйте что-то вроде этого:

$articles = array();
while ($row = mysql_fetch_assoc($result)) {
    $articles[$row['articleId']] = array(
        'created'  => $row['created'],
        'modified' => $row['modified']
    );
}
0 голосов
/ 19 января 2009

Я делаю некоторые предположения здесь:

Если в вашей таблице хранится строка для каждого из ваших сообщений (добавлено / обновлено), то этот запрос будет возвращать по одной строке на статью с нужными столбцами (articleNum, Created, Обновлено):

SELECT 
  A.articleNum, 
  MCreated.Timestamp AS Created, 
  MUpdated.Timestamp Updated
FROM Articles A
JOIN Messages MCreated 
  ON MCreated.articleNum = A.articleNum
  AND MCreated.Message = 'added'
LEFT JOIN Messages MUpdated
  ON MUpdated.articleNum = A.articleNum
  AND MUpdated.Message = 'updated'
0 голосов
/ 19 января 2009

Не уверен, что понимаю вопрос ..

Вы хотите посмотреть в сообщении и извлечь Created Time и Modified Time?

Если это так, какой формат даты / времени? Очень легко найти эту информацию с помощью регулярного выражения.

Ian

Редактировать -

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

Разместите пример сообщения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...