Ik probeer een kolom met integers (INT10) te importeren in een bestaande tabel. Het resultaat is dat de kolom niet "naast" de andere kolommen komt te staan, maar er "onder". Er worden dus extra rijen aangemaakt in de tabel. Waarschijnlijk zal ik een extra optie moeten meegeven. Maar welke?
Wat doe je precies? Heb je relevante code?
- Ariën - op 07/02/2022 15:26:30

Wat doe je precies? Heb je relevante code?




[size=xsmall]Toevoeging op 07/02/2022 16:45:36:[/size]

Dit is alleen maar een testje:

ALTER TABLE `jos_content` ADD `test` int(10) UNSIGNED NOT NULL DEFAULT 0;

INSERT INTO `jos_content`(`test`) VALUES
(47),
(49);
met een INSERT query voeg je altijd een nieuwe regel toe. Je zou moeten denken aan een Update query. Maar je komt dan op een punt waarop je zult moeten aangeven welke regel 47 en welke regel 49 moet worden. Je zou naast dat nummer dan een unieke waarde moeten hebben van een bestaande kolom zoals bijvoorbeeld het Id.
UPDATE tablename SET test=47 WHERE id=x

Hierbij is x het nummer van de rij die aangepast moet worden...
Ik zal even de context beschrijven waaruit mijn vraag is voortgekomen:
Ik ben geruime tijd bezig geweest om een Joomla website versie 1.5 te migreren naar versie 3.9. De site bevat veel artikelen (meer dan 1000). De oude site staat nog steeds live. Als laatste stap van de migratie wil ik de actuele hits (aantal bezoeken) overzetten naar de gemigreerde site.

Ik heb (voorlopig als test) de kolom “hits” van de live site geëxporteerd als .sql bestand.
1. Ik heb de kolom “hits” uit de nieuwe site geëxporteerd als .sql bestand. Ik heb daar wat wijzigingen in aangebracht en geprobeerd de kolom (onder een andere naam) weer te importeren. Dat lukt me nog steeds niet.
2. Ik heb de kolom “hits” uit de nieuwe site geëxporteerd als .csv excel bestand. Hierbij worden maar max 349 rijen geëxporteerd!!

Ik hoop dat je/jullie mij kunnen helpen met deze laatste stap zodat ik mijn nieuwe site live kan zetten.
Kan je de kolom hits niet exporteren als SQL?

En hoe zien beide structuren eruit?
Wellicht komt dit in de buurt.

https://dba.stackexchange.com/questions/11811/mysql-csv-update-not-insert-into-existing-table

Met deze zoekopdracht vind je meer oplossingen.

mariadb update csv into table

[size=xsmall]Toevoeging op 09/02/2022 13:20:46:[/size]

Voorbeeld hoe je een csv bestand inleest en update in een bestaande tabel.

Bewaar dit als demodemotekst.txt op een plek waarvan het verderop (path/to) wordt ingelezen.

1;Demo text - om te laden - in een stored procedure
2;Meer text - met een pipe
3;Wanneer er - meer - ruimte is - om te gaan vissen
4;Dan is - het vroeg - genoeg om - maatregelen te nemen


Voer dan deze sql code uit.
Pas bij LOAD DATA INFILE de padnaam aan.

DROP TABLE IF EXISTS `demo_data`;
CREATE TABLE `demo_data` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `demo_tekst` char(100) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

INSERT INTO `demo_data` (`id`, `demo_tekst`) VALUES
(1,	'Demo text;om te laden;in een stored procedure'),
(2,	'Meer text;met een pipe'),
(3,	'Wanneer er;meer;ruimte is;om te gaan vissen'),
(4,	'Dan is;het vroeg;genoeg om;maatregelen te nemen');

SELECT * FROM demo_data;

CREATE TEMPORARY TABLE temp_demo_table LIKE demo_data;

LOAD DATA INFILE '/path/to/demodemotekst.txt'
INTO TABLE temp_demo_table
FIELDS TERMINATED BY ';' (id, demo_tekst);

UPDATE demo_data
INNER JOIN temp_demo_table
ON temp_demo_table.id = demo_data.id  
SET demo_data.demo_tekst = temp_demo_table.demo_tekst;

SELECT * FROM demo_data;
Ik zou zeggen Of schrijf een php script die de hits uit de oude tabel inleest en in de nieuwe tabel wegschrijft of doe het met een tool zoals phpMyAdmin door beiden tabellen (desnoods met 1 met een aangepaste naam) in je database te schrijven waarna je de waarden van de oude tabel kopieert naar de nieuwe tabel:

UPDATE nieuweTabel t1
JOIN OudeTabel t2 ON t1.id = t2.id
SET t1.hits = t2.hits
Om op de originele vraag terug te komen (met gebruik van eerder voorbeeld) :

Kloon demo_data table met opgegeven velden en kopieer alle data.
CREATE table demo_data_temp SELECT id, demo_tekst FROM demo_data;


OF DEZE

Kloon demo_data table met opgegeven velden en kopieer de data met selectie.
CREATE table demo_data_temp SELECT id, demo_tekst FROM demo_data WHERE id = 2;


Bekijk de data in demo_data_temp.
SELECT * FROM demo_data_temp;


Bewerk vervolgens de data in demo_data_temp.

Update demo_data table.
UPDATE demo_data d1 
INNER JOIN demo_data_temp d2 
ON d1.id = d2.id
SET d1.demo_tekst = d2.demo_tekst;


Bekijk de bijgewerkte data.
SELECT * FROM demo_data;

Als het mijn databasemigratie was zou ik:
- met phpMyAdmin een CSV-export maken van de tabel met het aantal hits uit de Joomla 1.5 database
- die weer inlezen met phpMyAdmin in de database van Joomla 3.9 onder een andere naam, zeg `oudetabel`

Vervolgens kan je met een enkele UPDATE-query in de Joomla 3.9 database het aantal hits overzetten.
Iets als:

UPDATE `tabel` SET `hits` = `oudetabel`.`hits`
FROM `oudetabel`
WHERE `oudetabel`.`id` = `tabel`.`id`;

Wanneer alles is overzet kan je de oude tabel verwijderen (DROP TABLE `oudetabel`;)
Dank voor alle reacties en excuses voor mijn late reactie. De oplossing is voor mij nog steeds belangrijk maar door andere bezigheden, die nog even duren, reageer binnenkort.

Reageren