|
|
|
| Здравия желаю, форумчане:) у меня такой вопрос: можно ли как то в одном MySQL запросе уместить сценарий типа: IF(строка с таким ИД уже существует) обновляем старую ELSE вставляем новую | |
|
|
|
|
|
|
|
для: amigo62
(20.07.2008 в 19:20)
| | Для этого есть REPLACE. Синтаксис аналогичен INSERT. | |
|
|
|
|
|
|
|
для: BinLaden
(20.07.2008 в 20:11)
| | Не совсем понятно :( а можно этот оператор использовать в cледующем случае:
таблица referrers:
id | id2 | referrer | hosts |
---------------------------------------------
1 | 6 | softtime.ru | 3 |
---------------------------------------------
2 | 8 | php.com | 1 |
---------------------------------------------
3 | 6 | php.com | 8 |
запрос : "SELECT id FROM referrers WHERE id2=".$id." AND referrer='".$referrer."' LIMIT 1"
если вернул id ($uniqid):
UPDATE referrers SET hosts=hosts+1 WHERE id=$uniqid;
если нет:
"INSERT INTO referrers (id2,referrer) VALUES(".$id.",'".$referrer."')"
то есть поля id2 | referrer не являются в данном случае уникальными, и можно ли заменить эту конструкцию REPLACE - запросом, не могу понять... | |
|
|
|
|
|
|
|
для: amigo62
(20.07.2008 в 22:52)
| | Не понял, что за id2? | |
|
|
|
|
|
|
|
для: BinLaden
(20.07.2008 в 23:50)
| | Это идентификатор)) но не уникальный. В общую таблицу пишется реферрер и количество переходов с него, а id2 - это ИД сайта, на который совершен переход. То есть, сначала идет поиск - были ли переходы на ДАННЫЙ сайт с ДАННОЙ страницы, если да, то добавляется еще один, если нет, вставляется новая запись | |
|
|
|
|
|
|
|
для: amigo62
(20.07.2008 в 19:20)
| |
INSERT INTO `referrers` SET `id2`=456, `referrer`="", `hosts`=1 ON DUPLICATE KEY UPDATE `hosts`=`hosts`+1
|
Уникальный ключ - (`id2`, `referrer`). | |
|
|
|
|
|
|
|
для: sms-send
(21.07.2008 в 05:13)
| | Нет, не то | |
|
|
|
|
|
|
|
для: amigo62
(21.07.2008 в 13:41)
| | В mysql есть фозможность создания хранимых процедур, так есть и IF и много чего есче.
Под mysql 5
[url]ttp://dev.mysql.com/doc/refman/5.0/en/create-procedure.html[/url] | |
|
|
|
|
|
|
|
для: Veon
(21.07.2008 в 14:53)
| | Хм.. А где об этом по-русски можно прчитать?...
-----------
Нашел, почитал... Не слишком ли это сложно для такой простой операции??? | |
|
|
|
|
|
|
|
для: amigo62
(21.07.2008 в 13:41)
| | >Нет, не то
Короткий ответ.
А что именно "не то"? | |
|
|
|
|
|
|
|
для: sms-send
(21.07.2008 в 23:59)
| | При наличии строки со сходными значениями id2 и referrer вставляет новую, а не обновляет старую. Дело в том, что эти два столбца содержат не уникальные значения | |
|
|
|
|
|
|
|
для: amigo62
(22.07.2008 в 10:42)
| | Т.е. могут быть две разные записи содержащие id2 = 1, referer = "abc" одновременно?
В приведённой таблице (пост amigo62 (20.07.2008 в 22:52)) такого нет. | |
|
|
|
|
|
|
|
для: sms-send
(22.07.2008 в 13:05)
| | Все верно, двух записей с одинаковыми id2 = 1, referer = "abc" быть не может... Но запрос INSERT INTO ` table` SET `id`=123, `field1`=1 ON DUPLICATE KEY UPDATE `field1`=`field1`+1 не срабатывает... | |
|
|
|
|
|
|
|
для: amigo62
(22.07.2008 в 10:42)
| | > Дело в том, что эти два столбца содержат не уникальные значения
Если по отдельности они не уникальны - это не страшно. Вы должны поставить UNIQUE INDEX на связку двух полей. А вот если связка не уникальна - то смысла вообще никакого не вижу. | |
|
|
|
|
|
|
|
для: BinLaden
(22.07.2008 в 13:52)
| | ...не срабатывает, и кажется начинаю понимать почему :) пойду читать, как делать уникальной связку полей ;) | |
|
|
|