WN

WN (https://www.wn.se/forum/index.php)
-   Serversidans teknologier (https://www.wn.se/forum/forumdisplay.php?f=4)
-   -   flytta wordpress med SQL query (https://www.wn.se/forum/showthread.php?t=1045629)

Mortekai 2010-12-31 06:58

flytta wordpress med SQL query
 
1 bifogad(e) fil(er)
Klurar på att flytta min databas till ip.blogg men behöver lite hjälp med SQL.

Databaserna ser ut så här:
http://community.invisionpower.com/i...ttach_id=27661
Wordpress till höger och ip.blog till vänster.

Conny Westh 2010-12-31 12:04

Kan du posta CREATE satserna för dessa två tabeller så blir det lite lättare (så slipper jag knacka in det manuellt i min databas).

Grundprincipen är dock att skriva ungefär så här:

Jag har i detta lilla exempel förutsatt at kolumnerna mappar 1:1 i den ordning kolumnerna är upplagda i nedanstående SQL-sats (INSERT ... respektive SELECT ...):



Kod:

-- Den trickiga delen är att mappa alla kolumnerna rätt så man får med
-- så mycket info som möjligt från gamla tabellen.
--
-- Det största problemet är att mappa kommentarernas parent_ID till
-- huvudartikelns NYA ID i den NYA tabellen, det kan krävas att du lägger
-- upp en extra kolumn med ID till den gamla databasens PK för att du
-- ska få ordning på det.
--
-- Ett annat problem är om det är olika datatyper som ska konverteras,
-- särskilt om du har en textdatatyp som är numerisk i den nya tabellen,
-- då blir det kinkigt...

-- INSERT till nya tabellen
INSERT INTO IPBLOG (entry_author_id, entry_date, entry)

-- Hämta info från gamla tabellen
SELECT post_author_id, post_date, post_excerpt
FROM Wordpress;


Mortekai 2010-12-31 12:39

En enkel kopiering är inte så svårt, men går det att lägga in values i samma query? Blogid till exempel har ingen motsvarighet i Wordpress databasen så där måste jag lägga in ett värde så att rätt användare får bloggposten i sin blogg.

Idealiskt vore att köra något typ:
insert into ip.blogg (kol1, kol2, osv)
values null, 1, 2 osv
and
insert into ip.blogg(kol3, kol4, osv)
select val1, val2, val3 ,osv
from wordpress

men kan man göra så?
Har bara provat att antingen lägga in värden eller kopiera, aldrig båda samtidigt...

Conny Westh 2010-12-31 13:40

När du använder VALUES så kan du ersätta det med en SELECT i stället så kan du köra samma SQL-sats för hela databasen i en enda SQL-sats, precis som jag visade i mitt förra inlägg.

Du kan inte använda begreppet VALUES samtidigt som SELECT. SELECTen är mycket mer flexibel.

Förklara gärna mer var du hämtar värdet du vill ha in i blog_id så kanske jag förstår bättre.

Kod:

-- Detta är en enda SQL-sats om jobbar på hela databasen...

-- INSERT till nya tabellen
INSERT INTO IP.BLOG (WP_ID, entry_author_id, entry_date, entry, blog_id, blupp_id)

-- Hämta info från gamla tabellen med subselect för blog_id och ett exempel på¨en konstant
SELECT ID, post_author_id, post_date, post_excerpt , (SELECT  ...), 4
FROM Wordpress
-- Du kan ju även köra satsen för olika users individuellt
WHERE post_author=23;


Jag vet inte hur mappningarna är mellan tabellerna så du får gärna förklara mer för mig....

Om du lägger till en extra kolumn tillfälligt med ID från Wordpress tabellen så kan du köra update i IP.BLOG i efterhand och mappa ihop tabellerna med wordpress.ID och din nya IPBLOG.WP_ID ....

pelmered 2010-12-31 14:10

Jag tycker Conny krånglar till det lite.

Kod:

insert into ip.blog (col1, col2, col3, col4)
VALUES('col1', (select col2, col3, col4 FROM wordpres ) )

I det här exemplet sätter du värdet på "col1" direkt i queryn.
Col2-4 hämtar du ifrån din gamla databas. Här det det viktigt att kolumnerna är i exakt samma ordning i inserten(första parentesen) som de är i values-selecten.

Viktigt är också att det då är exakt samma format på datan. Är det inte exakt samma format på datan måste du nog göra ett script som gör en select-loop och konverterar datan för varje rad innan den stoppas in i den nya databasen med en insert-query.

Conny Westh 2010-12-31 14:15

Citat:

Ursprungligen postat av ITisGood.se (Inlägg 20385684)
Jag tycker Conny krånglar till det lite.

Kod:

insert into ip.blog (col1, col2, col3, col4)
VALUES('col1', (select col2, col3, col4 FROM wordpres ) )

I det här exemplet sätter du värdet på "col1" direkt i queryn.
Col2-4 hämtar du ifrån din gamla databas. Här det det viktigt att kolumnerna är i exakt samma ordning i inserten(första parentesen) som de är i values-selecten.

Viktigt är också att det då är exakt samma format på datan. Är det inte exakt samma format på datan måste du nog göra ett script som gör en select-loop och konverterar datan för varje rad innan den stoppas in i den nya databasen med en insert-query.

Kod:

INSERT INTO ip.blog (col1, col2, col3, col4)
SELECT 'val1', col2, 3, col4 FROM wordpress

Är betydligt enklare än att använda VALUES eftersom VALUES är mer oflexibelt än en regelrätt SELECT och VALUES inte tillför något i detta fall.

Det enda jag la till var lite förklarande texter/kommentarer så det skulle bli lättare att förstå.

Mortekai 2011-01-02 13:40

Så här var det tänkt :)

INSERT INTO ibf_blog_entries
( blog_id,
entry_author_id,
entry_author_name,
entry_date,
entry_name,
entry,
entry_status,
entry_locked,
entry_edit_time,
entry_html_state,
entry_use_emo,
entry_last_update,
entry_name_seo,
entry_short)

SELECT {BLOG_ID},
{ENTRY_AUTHOR_ID},
{ENTRY_AUTHOR_DISPLAY_NAME},
UNIX_TIMESTAMP(post_date_gmt),
post_title,
post_content,
(CASE WHEN post_status = 'publish' THEN 'published' ELSE 'draft' END),
(CASE WHEN comment_status = 'open' THEN 0 ELSE 1 END),
UNIX_TIMESTAMP(post_modified_gmt),
1,
1,
UNIX_TIMESTAMP(post_modified_gmt),
post_name,
(CASE WHEN post_excerpt <> '' THEN post_excerpt ELSE NULL END)
FROM wp_posts
WHERE post_type = 'post';

Conny Westh 2011-01-02 22:23

Bilderna i ditt första inläggär helt oläsbara nu, kan du lägga upp tabellstrukturerna igen gärna som create staments.... ?

Funderar mest på om bölog_id var PK i IP.BLOG eller inte....


Alla tider är GMT +2. Klockan är nu 13:56.

Programvara från: vBulletin® Version 3.8.2
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Svensk översättning av: Anders Pettersson