2013-03-23 2 views
0

У меня есть следующая сценарий в моей базе данных mysql. 2 таблицы:INSERT строка на основе отношений MYSQL

todoitems

  • todo_id
  • todo_title

todo_sync_controllers

  • todo_sync_id
  • device_id
  • should_delete
  • is_deleted
  • todo_id

Как вы можете видеть, что есть один-ко-многим из todoitems до todo_sync_controllers.

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

Один из способов решения этой проблемы - использовать циклы и несколько запросов из моего php-скрипта, но мне было интересно, можно ли это выполнить с помощью одного запроса INSERT? Есть идеи?

+0

Почему бы не создать уникальный ключ DEVICE_ID и todo_id, а затем сделать вставку каждый раз запрос? Только в первый раз запрос будет успешным. – somnath

+0

поэтому в основном вы хотите выбрать данные если есть другой мудрый insert. –

+0

@somnath: Как выглядит оператор вставки? Разве это не означало бы, что мне все еще нужно перебирать все todoitems и выполнять запрос INSERT для каждого todo_id? –

ответ

1

Ваше решение довольно просто, просто сделайте уникальный ключ для todo_id и device_id в таблице todo_sync_controllers, поэтому когда вы вставляете таблицу в свой скрипт, он проверяет наличие уникального ограничения и, если он не существует, будет вставлять данные, иначе игнорируемые Ошибка mysql для запроса. Если вы хотите проверить, вставлены ли ваши данные или просто проигнорированы из-за дублирования ключа, вам необходимо применить условие при выполнении запроса, и если оно вернет значение true, то вставка будет проигнорирована системой иначе, как указано в системе. Это будет сделано, как указано ниже, код

if(mysql_query($sql_query)){ 
    echo "your data inserted"; 
}else{ 
    echo "data already exist"; 
} 

и изменить ваш стол с

create unique index on todo_sync_controllers (todo_id ,device_id) 
+0

Это отлично работает, спасибо за это решение! –

Смежные вопросы