|
|
|
| Каким запросом можно узнать есть ли в таблице USERS указанный id?
Если есть, то надо перезаписать поле text с этим id, а если нет, то нужно создать новое поле с указанным id и записать туда данные. Как это можно сделать? | |
|
|
|
|
|
|
|
для: Specter
(07.06.2007 в 15:08)
| | если id - это первичный ключ, и при обновлении нужно изменить все поля, кроме него, можно воспользоваться запросом REPLACE (синтаксис такой же как у INSERT)
Если меняется лишь часть полей - придется писать три запроса.
SELECT count(id) FROM tab WHERE id = $id;
и затем по результатам исполнять либо INSERT либо UPDATE | |
|
|
|
|
|
|
|
для: Trianon
(07.06.2007 в 15:13)
| | Нет. Id не первичный ключ. Ну скажем так: нужно найти в таблице поле id и изменить поля, которые относятся к нему.
Вот таблица если что
CREATE TABLE `votes` (
`nid` int(4) NOT NULL auto_increment,
`id` int(4) NOT NULL,
`name` text,
PRIMARY KEY (`id`)
) TYPE=MyISAM;
|
Вот здесь нужно найти допустим значение 222 для id-а и изменить поле name где id=222, а если такога id нет, то нужно его создать. | |
|
|
|
|
|
|
|
для: Specter
(07.06.2007 в 15:43)
| | тогда просто следуем второму из мной описанных вариантов.
Но если id не только первичный ключ, но и не уникальный индекс, возможна ситуация, что будут изменены две и более строки. | |
|
|
|
|
|
|
|
для: Trianon
(07.06.2007 в 15:46)
| | Извените , но я только начинаю учить MySQL и это мой первый скрипт с использованием базы. Не могли бы вы мне полностью код написать? | |
|
|
|
|
|
|
|
для: Specter
(07.06.2007 в 15:50)
| | что вызывает сложности?
Показывайте код.
Иначе это будет не Ваш первый скрипт, а мой. | |
|
|
|
|
|
|
|
для: Trianon
(07.06.2007 в 15:56)
| | Я незнаю как проверить существование ID в таблице. | |
|
|
|
|
|
|
|
для: Specter
(07.06.2007 в 16:29)
| |
$sql = "SELECT COUNT(id) FROM tab WHERE id = $id";
$res = mysql_query($sql) or die("Error in $sql: ".mysql_error());
$num = mysql_result($res, 0);
echo $num;
|
| |
|
|
|
|
|
|
|
для: Trianon
(07.06.2007 в 16:38)
| | Если я правильно понял, то должно быть так
$SQL = "SELECT COUNT(id) FROM votes WHERE id='".$'id'."'";
$q = mysql_query($SQL);
$num = mysql_result($q, 0);
if(!$num) {
$query = mysql_query("INSERT INTO `votes` VALUES(0, '".$id."', '".$_POST['q']."')"); }
}
|
да? | |
|
|
|
|
|
|
|
для: Specter
(07.06.2007 в 18:04)
| | Врете.
Этот скрипт такого написать не может. | |
|
|
|
|
|
|
|
для: Trianon
(07.06.2007 в 18:33)
| | Если я правильно понял, то должно быть так
$SQL = "SELECT COUNT(id) FROM votes WHERE id='".$'id'."'";
$q = mysql_query($SQL);
$num = mysql_result($q, 0);
if(!$num) {
$query = mysql_query("INSERT INTO `votes` VALUES(0, '".$id."', '".$_POST['q']."')"); }
}
|
да? | |
|
|
|
|
|
|
|
для: Trianon
(07.06.2007 в 18:33)
| | Если я правильно понял, то должно быть так
$SQL = "SELECT COUNT(id) FROM votes WHERE id='".$'id'."'";
$q = mysql_query($SQL);
$num = mysql_result($q, 0);
if(!$num) {
$query = mysql_query("INSERT INTO `votes` VALUES(0, '".$id."', '".$_POST['q']."')"); }
}
|
да? | |
|
|
|
|
|
|
|
для: Specter
(07.06.2007 в 18:41)
| | нет. | |
|
|
|
|
|
|
|
для: Specter
(07.06.2007 в 18:41)
| | Я бы переписал так:
<?php
$SQL = mysql_query("SELECT COUNT(id) FROM votes WHERE id='".$id."'");
if(mysql_num_rows($SQL) == 0) { mysql_query("INSERT INTO `votes` VALUES(0, '".$id."', '".$_POST['q']."')"); } else { mysql_query("UPDATE `votes` SET `text` = '".$_POST['q']."' WHERE `id` = '".$id."'"); }
?>
|
| |
|
|
|
|
|
|
|
для: Trianon
(07.06.2007 в 15:13)
| | если это первичный ключ, то можно воспользоваться вот такой конструкцией
INSERT ... ON DUPLICATE KEY UPDATE | |
|
|
|
|
|
|
|
для: Loki
(07.06.2007 в 17:13)
| | Во первых, (added in MySQL 4.1.0)
Во вторых, новичку я бы такое не посоветовал, даже зная, что у него свежий сервер. | |
|
|
|
|
|
|
|
для: Trianon
(07.06.2007 в 17:25)
| | А как правильно?
У меня мой вариант работает. :) | |
|
|
|
|
|
|
|
для: Specter
(07.06.2007 в 19:12)
| | если работает, значит вопрос закрыт. :) | |
|
|
|
|
|
|
|
для: Trianon
(07.06.2007 в 19:22)
| | Ну скажите как правильнее. Может мой код будет тормозить раз он не правильный. :) | |
|
|
|
|
|
|
|
для: Specter
(07.06.2007 в 19:44)
| | WHERE id='".$'id'."'";
это мне непонятно. | |
|
|
|
|
|
|
|
для: Trianon
(07.06.2007 в 19:48)
| | WHERE id='".$id."'" :) | |
|
|
|
|
|
|
|
для: Trianon
(07.06.2007 в 19:48)
| | WHERE id='".$id."'" :) | |
|
|
|
|
|
|
|
для: Specter
(07.06.2007 в 20:03)
| | чем это лучше чем то, что написано у меня? | |
|
|
|
|
|
|
|
для: Trianon
(07.06.2007 в 20:06)
| | Так это одно и то же.
Я просто спрашиваю я с условием все правильно сделал? Или надо было как-то по-другому делать? :) | |
|
|
|
|
|
|
|
для: Trianon
(07.06.2007 в 20:06)
| | >WHERE id='".$'id'."'";
>это мне непонятно.
Может ГЕТом передаёт номер, который искать.. Тока с кавычками напутал.. Да и в коде лишняя фигурная скобка.. значит не всё нам выдаёт.. | |
|
|
|
|
|
|
|
для: Specter
(07.06.2007 в 20:03)
| | . | |
|
|
|
|
|
|
|
для: Specter
(07.06.2007 в 20:03)
| | . | |
|
|
|
|
|
|
|
для: Trianon
(07.06.2007 в 20:07)
| | Я просто код с скрипта скопировал с скобкой. А так ведь я правильно понял, что если id существует, то $num будет равен true? | |
|
|
|
|
|
|
|
для: Specter
(07.06.2007 в 20:34)
| | Это не одно и то же.
Неправильно.
В $num будет записано число строк в таблице, поле id в которых равно искомому. | |
|
|
|
|
|
|
|
для: Trianon
(07.06.2007 в 21:04)
| | Эм, я не правильно написал? | |
|
|
|
|
|
|
|
для: mr Bin
(07.06.2007 в 22:06)
| | Включите линейный режим форума. В нем написано, кто кому отвечает. | |
|
|
|
|
|
|
|
для: Trianon
(07.06.2007 в 22:21)
| | Я видел, что Вы ответили ему. Но часто так бывает, что независимо от ника отвечают...
И я подумал, что Вы каким-то образом адресовали первую строчку мне... Понял.
И всё же, я правильный код составил? :) Или и ко мне есть претензии? | |
|
|
|
|
|
|
|
для: mr Bin
(07.06.2007 в 23:09)
| | у меня? Претензий - нет.
Замечания... как обычно:
Логические ошибки: функция mysql_num_rows всегда вернет 1 независимо от количества строк в таблице,
непонятен источник возникновения переменной $id,
отсутствует восстановление данных после искажения механизмом магических кавычек,
отсутствует экранирование при образовании литеральных констант MySQL-кода.
стилистические ошибки:
целочисленное (вроде как) поле id сравнивается со строковым литералом,
отсутствует явное перечисление имен полей в операторе INSERT. | |
|
|
|
|
|
|
|
для: Trianon
(08.06.2007 в 00:57)
| | >mysql_num_rows всегда вернет 1 независимо от количества строк в таблице
Странно, меня никогда это ещё не подводило. Если такого нет в таблице, то значит нет.
>непонятен источник возникновения переменной $id
Ну я тоже не знаю, а втору виднее.. я только подстроился под него..
>отсутствует восстановление данных после искажения механизмом магических кавычек,
>отсутствует экранирование при образовании литеральных констант MySQL-кода.
Ну я не вдавался в такие подробности, это лишь краткий пример..
>целочисленное (вроде как) поле id сравнивается со строковым литералом,
>отсутствует явное перечисление имен полей в операторе INSERT.
Опять же.. какой запрос автор опубликовал, такой я и вставил для примера, чтобы ему было понятнее, что откуда берется..
p.s. Называется напросился :( | |
|
|
|
|
|
|
|
для: mr Bin
(08.06.2007 в 01:10)
| | >>mysql_num_rows всегда вернет 1 независимо от количества строк в таблице
>Странно, меня никогда это ещё не подводило. Если такого нет в таблице, то значит нет.
Вы не заметили, что запрос - SELECT COUNT(id) - Такой запрос всегда вернет одно значение независимо от числа строк в таблице.
Я заметил, что большинство огрехов - автора.
Но Вы же назвали код своим... Получите, что называется, и распишитесь :) | |
|
|
|
|
|
|
|
для: Trianon
(08.06.2007 в 01:17)
| | Я отказываюсь от авторства!
Да, действительно, не заметил каунта.. Если б сам с нуля писал - не ошибся бы.. | |
|
|
|