Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум MySQL

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Аналог if()...else в MySQL
 
 автор: amigo62   (20.07.2008 в 19:20)   письмо автору
 
 

Здравия желаю, форумчане:) у меня такой вопрос: можно ли как то в одном MySQL запросе уместить сценарий типа: IF(строка с таким ИД уже существует) обновляем старую ELSE вставляем новую

   
 
 автор: BinLaden   (20.07.2008 в 20:11)   письмо автору
 
   для: amigo62   (20.07.2008 в 19:20)
 

Для этого есть REPLACE. Синтаксис аналогичен INSERT.

   
 
 автор: amigo62   (20.07.2008 в 22:52)   письмо автору
 
   для: 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 - запросом, не могу понять...

   
 
 автор: BinLaden   (20.07.2008 в 23:50)   письмо автору
 
   для: amigo62   (20.07.2008 в 22:52)
 

Не понял, что за id2?

   
 
 автор: amigo62   (21.07.2008 в 12:20)   письмо автору
 
   для: BinLaden   (20.07.2008 в 23:50)
 

Это идентификатор)) но не уникальный. В общую таблицу пишется реферрер и количество переходов с него, а id2 - это ИД сайта, на который совершен переход. То есть, сначала идет поиск - были ли переходы на ДАННЫЙ сайт с ДАННОЙ страницы, если да, то добавляется еще один, если нет, вставляется новая запись

   
 
 автор: sms-send   (21.07.2008 в 05:13)   письмо автору
 
   для: amigo62   (20.07.2008 в 19:20)
 

INSERT INTO `referrers` SET `id2`=456, `referrer`="", `hosts`=1 ON DUPLICATE KEY UPDATE `hosts`=`hosts`+1


Уникальный ключ - (`id2`, `referrer`).

   
 
 автор: amigo62   (21.07.2008 в 13:41)   письмо автору
 
   для: sms-send   (21.07.2008 в 05:13)
 

Нет, не то

   
 
 автор: Veon   (21.07.2008 в 14:53)   письмо автору
 
   для: amigo62   (21.07.2008 в 13:41)
 

В mysql есть фозможность создания хранимых процедур, так есть и IF и много чего есче.

Под mysql 5

[url]ttp://dev.mysql.com/doc/refman/5.0/en/create-procedure.html[/url]

   
 
 автор: amigo62   (21.07.2008 в 15:35)   письмо автору
 
   для: Veon   (21.07.2008 в 14:53)
 

Хм.. А где об этом по-русски можно прчитать?...
-----------
Нашел, почитал... Не слишком ли это сложно для такой простой операции???

   
 
 автор: sms-send   (21.07.2008 в 23:59)   письмо автору
 
   для: amigo62   (21.07.2008 в 13:41)
 

>Нет, не то

Короткий ответ.
А что именно "не то"?

   
 
 автор: amigo62   (22.07.2008 в 10:42)   письмо автору
 
   для: sms-send   (21.07.2008 в 23:59)
 

При наличии строки со сходными значениями id2 и referrer вставляет новую, а не обновляет старую. Дело в том, что эти два столбца содержат не уникальные значения

   
 
 автор: sms-send   (22.07.2008 в 13:05)   письмо автору
 
   для: amigo62   (22.07.2008 в 10:42)
 

Т.е. могут быть две разные записи содержащие id2 = 1, referer = "abc" одновременно?

В приведённой таблице (пост amigo62 (20.07.2008 в 22:52)) такого нет.

   
 
 автор: amigo62   (22.07.2008 в 14:08)   письмо автору
 
   для: 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 не срабатывает...

   
 
 автор: BinLaden   (22.07.2008 в 13:52)   письмо автору
 
   для: amigo62   (22.07.2008 в 10:42)
 

> Дело в том, что эти два столбца содержат не уникальные значения

Если по отдельности они не уникальны - это не страшно. Вы должны поставить UNIQUE INDEX на связку двух полей. А вот если связка не уникальна - то смысла вообще никакого не вижу.

   
 
 автор: amigo62   (22.07.2008 в 14:10)   письмо автору
 
   для: BinLaden   (22.07.2008 в 13:52)
 

...не срабатывает, и кажется начинаю понимать почему :) пойду читать, как делать уникальной связку полей ;)

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования