Autor Zpráva
Matess
Profil *
Dobrý den vespolek.
Chtěl bych zkopírovat určitá data z jedné tabulky a vložit je do druhé. Problém je v tom, že těch řádků jsou desítky a nechce se mi to dělat ručně. Můžete mi prosím poradit jak na to?
(Chci zkopírovat články z Joomly do Wordpressu.)

Zkouším to takto:

$result = mysql_query("SELECT * FROM jm_content ORDER BY id LIMIT 1");  
  while ($row = mysql_fetch_object($result)) {
    INSERT INTO 'd112452_fe24c3a'.'bjk4_posts'
        ('ID', 
        'post_author', 
        'post_date', 
        'post_date_gmt', 
        'post_content', 
        'post_title', 
        'post_excerpt', 
        'post_status', 
        'comment_status', 
        'ping_status', 
        'post_password', 
        'post_name', 
        'to_ping', 
        'pinged', 
        'post_modified', 
        'post_modified_gmt', 
        'post_content_filtered', 
        'post_parent', 
        'guid', 
        'menu_order', 
        'post_type', 
        'post_mime_type', 
        'comment_count') 
        
VALUES  (NULL, '0', $row->created, $row->created, $row->introtext, $row->title, '', 'publish', 'open', 'open', '', $row->alias, '', '', $row->publish_up, $row->publish_up, '', '0', '', '0', 'post', '', '0');

  }

To mi ale vypíše chybu: Parse error: syntax error, unexpected 'INTO' (T_STRING) in /data/web/virtuals/112442/virtual/www/domains/example.com/prevod.php on line 23

Můžete mi prosím poradit co dělám špatně a kde?
smitka
Profil
Problém je v tom, že INSERT INTO... nemáš v uvozovkách a není patrné co s tím řetězcem vůbec chceš dělat.

Takže pokud bys chtěl si nechat vygenereovat sadu SQL příkazů, tak bych před to celé dal echo ", na řádku 28 by pak bylo třeba obalit přístup k objektům do složených závorek (nebo ukončit a znovu otevřít řetězec) a raději to obalit do uvozovek: $row->created na '{$row->created}' atd.

Pokud bys ty příkazy chtěl rovnou vykonat, tak místo echo jen dát mysql_query.

Případně existují migrační pluginy, ale bohužel s nimi nemám osobní zkušenosti např. wordpress.org/plugins/fg-joomla-to-wordpress.
Matess
Profil *
smitka:
Děkuji za rychlou odpověď.
Když to celé dám do echo "", tak se mi to vypíše na monitor, ale pokud dám místo echo mysql_query, tak vypíše chybu Parse error: syntax error, unexpected '"' in /data/web/virtuals/...

Takže jsem dal za mysql_query závorku, potom uvozovky, dále celý kod, a na konec uvozovky a závorku. Když to spustím, tak to na monitor nevypíše nic (ani chybu), ale v databázi se nové řádky neobjeví.
Bohužel nevím proč?! (Mysql_error nic nevypíše.)

Celý kod teď vypadá takto:
$result = mysql_query("SELECT * FROM jm_content ORDER BY id LIMIT 10");  
  while ($row = mysql_fetch_object($result)) {
    mysql_query "INSERT INTO 'd112452_fe24c3a'.'bjk4_posts'
        ('ID', 
        'post_author', 
        'post_date', 
        'post_date_gmt', 
        'post_content', 
        'post_title', 
        'post_excerpt', 
        'post_status', 
        'comment_status', 
        'ping_status', 
        'post_password', 
        'post_name', 
        'to_ping', 
        'pinged', 
        'post_modified', 
        'post_modified_gmt', 
        'post_content_filtered', 
        'post_parent', 
        'guid', 
        'menu_order', 
        'post_type', 
        'post_mime_type', 
        'comment_count')
        
VALUES  (NULL, '0', {$row->created}, {$row->created}, {$row->introtext}, {$row->title}, '', 'publish', 'open', 'open', '', {$row->alias}, '', '', {$row->publish_up}, {$row->publish_up}, '', '0', '', '0', 'post', '', '0');";

  }

  echo mysql_error();

Pluginy jsem nějaké zkoušel, ale chci to zkusit takto.
mimochodec
Profil
Matess:
Podívej se, jak funguje php.net/manual/en/function.mysql-query.php
juriad
Profil
Matess:
Místo apostrofů na řádcích 3 - 26 musíš použít zpětné apostrofy. `
Matess
Profil *
mimochodec:
Anglicky neumím, ale s překladačem jsem přišel na to, že tam nesmí být na konci středník. Myslel si toto?

juriad:
Děkuji.
Upravil jsem to a teď to háže zase jinou chybu. You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '07:37:32, 2014-04-01 07:37:32,
12. se koná v Havířově Poh' at line 26


Na řádku 26 mám `post_date`,
řádek 24: (`ID`,
řádek 25: `post_author`, 
řádek 26: `post_date`, 
řádek 27: `post_date_gmt`,
...
 
juriad
Profil
Matess:
To se týká toho řádku, kde vkládáš datum. Datumový literál musí být uvozený apostrofy. Tedy:
.. '{$row->created}',
Matess
Profil *
juriad:
Už to funguje.

Děkuji všem za vaše rady.
xROAL
Profil
Dovolím si dodať, že v SQL existuje INSERT...SELECT.

V praxi (v skrátenej verzii):
INSERT INTO `d112452_fe24c3a`.`bjk4_posts` (`id`, `post_author`, `post_date`) SELECT NULL, "0", `created` FROM `jm_content` ORDER BY `id` LIMIT 10

Netrúfam si tvrdiť, ako je to s výkonom (aj keď verím, že takto si to databáza vie lepšie optimalizovať, tiež je v tomto prípade menej komunikácie medzi databázou a klientom), no každopádne mi to príde ako pohodlnejšie/prehľadnejšie riešenie.

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0