2016-12-05 6 views
-1

Пожалуйста, мне нужно скопировать данные из таблицы и вставить их еще раз и изменить только имя владельца и корневое имя, у меня есть следующая структура таблицы для примера того, что я пытаюсь делать. мое кодирование в PHPЗапрос Sql для копирования данных и замены нескольких объектов при сохранении его снова

Он был сохранен в базе данных таким образом

id | root | subname | type | owner 
------|------|---------|------|---------- 
1  | AB | subS0 | file | peter 
2  | CB | null | txt | peter 
3  | DF | ast  | doc | mike 
4  | AB | ghst | cmd | peter 
5  | OF | wmel | inc | john 

Теперь я хочу, чтобы скопировать все данные, имя сущности является корнем и снова вставить его с другим именем объекта и именем владельца

После того как я вставить это будет выглядеть следующим образом

id | root | subname | type | owner 
------|------|---------|------|---------- 
1  | AB | subS0 | file | peter 
2  | CB | null | txt | peter 
3  | DF | ast  | doc | mike 
4  | AB | ghst | cmd | peter 
5  | OF | wmel | inc | john 
6  | JK | subS0 | file | james 
7  | JK | ghst | cmd | james 

выше результата копирования все из таблицы, имя корень AB и вставить его с другим корневое имя JK, а также изменить имя владельца. Как мне запустить sql-запрос, который сделает это для меня?

Вот пример кода, что я пытался сделать

<?php 
    $db->prepare(" 
    INSERT INTO filelist(name, owner, date, Description, PrivacyType, tags, Type) 
    VALUES(:name, :owner, date, Description, PrivacyType, tags, :Type) 
    SELECT name, owner, date, Description, PrivacyType, tags, Type 
//OR this way 
    SELECT :name, :owner, date, Description, PrivacyType, tags, :Type 
    FROM filelist 
    WHERE name = :copyfromHere 
    "); 
       $db->bind(':name', 'JK'); 
       $db->bind(':owner', 'james'); 
       $db->bind(':copyfromHere', 'AB'); 
       $db->bind(':Type', 'TT'); 
    ?> 
+0

ваша логика говорит на самом деле не очень Чисто. Уточняю больше немного – Rahul

+0

@Rahul i обновил пример запроса того, что я пытаюсь сделать –

+0

@Rahul, пожалуйста, мне нужна помощь, я знаю, что я приближаюсь к запросу, но как использовать его в pdo - это моя проблема, работает, когда я запускаю он в sql, но когда я реализую его в своем проекте, это не –

ответ

0

Попробуйте с псевдонимом:

Ответ на ваш первый вопрос:

INSERT INTO `filelist` (root, subname, type, owner) 
SELECT 'JK', t.subname, t.type, 'James' FROM `filelist` as t WHERE t.root='AB' 

И то же самое с п.д.о.-Пример:

<?php 
    $db->prepare(" 
    INSERT INTO filelist(name, owner, date, Description, PrivacyType, tags, Type) 
    SELECT :name, :owner, t.date, t.Description, t.PrivacyType, t.tags, :Type 
    FROM filelist AS t 
     WHERE t.name = :copyfromHere 
"); 
      $db->bind(':name', 'JK'); 
      $db->bind(':owner', 'james'); 
      $db->bind(':copyfromHere', 'AB'); 
      $db->bind(':Type', 'TT'); 
?> 
0

Вы можете изменить данные, необходимые в рамках суб-выбора во вставке

INSERT INTO filelist (root, subname, type, owner) 
SELECT 'JK', subname, type, 'james' FROM filelist 

с использованием констант внутри запрос, вероятно, самый простой, если вы хотите контролировать значения в PHP, замените переменной $.

+0

в моем примере с образцом запроса не нужно добавлять 'VALUES (: root,: subname ,: type,: owner)' снова, и я использую php pdo в части выбора я сделаю так: 'SELECT: JK, subname, type,: owner FROM filelist'? я только что обновил свой вопрос –

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

  • Нет связанных вопросов^_^