У меня есть небольшая проблема, я надеюсь, что вы сможете мне помочь.
В первую очередь моя таблица DB выглядит так:
+---------------+--------------+------+-----+-------------------+----------------+
| Field | Type | Null | Key | Default | Extra |
+---------------+--------------+------+-----+-------------------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| KlubID | varchar(11) | NO | | 0 | |
| Medlemsnummer | varchar(11) | NO | | 0 | |
| KlubType | varchar(128) | NO | | | |
| Handling | varchar(128) | NO | | | |
| Tidspunkt | timestamp | NO | | CURRENT_TIMESTAMP | |
+---------------+--------------+------+-----+-------------------+----------------+
Скажем, я получил записи X, где "Обработка" равно Y в моей таблице позволяет вызывать результаты P. Теперь я хотел бы взять все P и вставить строку foreach P, где значение "Обработка" теперь будет равно Q.
Проблема в том, что я хочу сделать вставку с помощью одной кнопки (submit) не с несколькими формами.
Заранее благодарю вас за помощь. Не стесняйтесь спрашивать больше информации, если это требует большей ясности.
/Nicki
EDIT: для большей ясности
public static function find_todays_children() {
global $db;
$sql = "SELECT *
FROM (
SELECT *
FROM Handlinger
AS a
WHERE date(Tidspunkt) = curdate()
AND Tidspunkt = (
SELECT max(Tidspunkt)
FROM Handlinger
AS b
WHERE a.Medlemsnummer = b.Medlemsnummer
)
)
AS c
ORDER BY handling DESC, medlemsnummer";
return static::find_by_sql($sql);
}
Этот запрос выше возвращает следующее.
+------+--------+---------------+----------+----------+---------------------+
| id | KlubID | Medlemsnummer | KlubType | Handling | Tidspunkt |
+------+--------+---------------+----------+----------+---------------------+
| 5786 | 0 | 1 | FK | Kommet | 2010-10-06 13:48:06 |
| 5787 | 0 | 2 | FK | Kommet | 2010-10-06 13:48:10 |
| 5789 | 0 | 4 | FK | Kommet | 2010-10-06 13:48:16 |
| 5790 | 0 | 3 | FK | G?et | 2010-10-06 13:48:27 |
+------+--------+---------------+----------+----------+---------------------+
Затем я хочу иметь возможность вставить 3 строки, где поле "Обработка" - это другое значение. Я могу сделать это с помощью HTML-формы с PHP, но я не могу понять, как сделать все это одним кликом один раз... Важно то, что не вставлять ничего, где последняя запись для определенного "Medlemsnummer" (user_id) уже равна значению "Gået"
Моя форма выглядит следующим образом:
...
if(isset($action->Handling) != "Kommet") {
$do_action = "Kommet";
} else {
$do_action = "Gået";
}
...
<section>
<form action="phineaslog_barn.php" method="post">
<label for="Status">Klub Navn: </label>
<input type="text" name="Medlemsnummer" value="<?php echo $child->Medlemsnummer; ?>" />
<input type="text" name="Handling" value="<?php echo $do_action; ?>" />
<input type="submit" name="submit" value="<?php echo $do_action; ?>" />
</form>
</section>
Мое понимание вопроса:
Для каждой строки, которая является окончательной записью для пользователя, где обработка = kommet
Итак... чтобы совместить лучшее из двух миров...
INSERT INTO tablename (KlubID,Medlemsnummer,KlubType,Handling,Tidspunkt)
SELECT KlubID,Medlemsnummer,KlubType,'Gået',NOW()
FROM Handlinger
AS a
WHERE date(Tidspunkt) = curdate()
AND Handling = 'Kommet'
AND Tidspunkt = (
SELECT max(Tidspunkt)
FROM Handlinger
AS b
WHERE a.Medlemsnummer = b.Medlemsnummer
)
В сущности, вы хотите запустить этот запрос?
INSERT INTO tablename (KlubID,Medlemsnummer,KlubType,Handling,Tidspunkt)
SELECT KlubID,Medlemsnummer,KlubType,'Gået',NOW()
FROM tablename
WHERE Handling = 'Kommet';
Или, больше в PHP:
$from = $_POST['Handling'] == 'Kommet' ? 'Kommet' : 'Gået';
$to = $from == 'Kommet' ? 'Gået' :'Kommet';
mysql_query("
INSERT INTO tablename (KlubID,Medlemsnummer,KlubType,Handling,Tidspunkt)
SELECT t1.KlubID,t1.Medlemsnummer,t1.KlubType,'$to',NOW()
FROM tablename t1
LEFT JOIN tablename t2
ON t1.Medlemsnummer = t2.Medlemsnummer
AND t2.Tidspunkt > t1.Tidspunkt
WHERE DATE(t1.Tidspunkt) = CURDATE() AND t1.Handling = '$from' AND t2.id IS NULL");
Или есть ли больше ограничений на какие строки, которые вы хотели бы добавить, кроме Handling
?
WHERE
? Должны ли мы получать только записи, для которых последний тип обработки был «Kommet», а не какой- либо обработки?
Вы можете сделать что-то вроде этого:
Напишите метод для возврата DataTable
Пример:
private DataTable pResutls()
{
do your select handling=Y;
return DataTableWithResult;
}
в событии нажатия кнопки
DataTable p = pResutls();
foreach(DataRow row in p)
{
if (row["Handling"].toSring()=='Q')
{
then insert this row (write your method to insert)
}
}
Таким образом вам понадобится метод для получения результатов (обработка == 'y')
Метод, который вставляет строку (вы можете передать параметр DataRow как параметр и выполнить обновление там)
И затем с вашей кнопки вы можете сделать все за один щелчок, как показано выше.