Toon posts:

MySQL Update probleem

Pagina: 1
Acties:

Verwijderd

Topicstarter
Hallo mensen,

Ik heb een redelijke ervaring met MySQL, dus ik weet wel hoe en wat moet doen om iets in een tabel in tevoegen, updaten, verwijderen..

Maar ik ben nu toch tegen een probleem opgelopen.

Dit is mijn situatie: Een bestand (bv. een document) wordt geupload, en ingelezen.

Dus stel je voor dat dit de regel is in het document:
auto, fiets, brommer, vliegtuig.

Dan wordt het opgedeeld in regels door het command "foreach". (PHP)
$tagnaam wordt voor elk in gelezen woord gezet en wordt het dus uiteindelijk:

$tagnaam = auto;
$tagnaam = fiets;
$tagnaam = brommer;
$tagnaam = vliegtuig;

Maar hoe kan ik dat nu invoegen in een MySQL tabel?

Als namelijk deze query ingelezen en uitgevoerd wordt:
mysql_query("UPDATE data SET vervoer = '$tagnaam'' WHERE id = '1'");

Wordt alleen het laatste opgegeven $tagnaam in gevoerd.


Is het niet mogelijk om een veld te updated waar al een content instaat en deze dan bijvoorbeeld ernaast in te voegen. (auto staat er al -> en fiets wordt ingevoerd -> resultaat: auto fiets)

Hopelijk kan iemand mij verder helpen of heeft iemand een idee hoe ik het anders kan oplossen.

Alvast bedankt!

(PS. Iedereen prettige feestdagen.)

Maxxie.

  • rrrandy
  • Registratie: Juli 2005
  • Laatst online: 27-06 13:00
Een oplossing zou zijn om de strings te concateneren in PHP. Probleem is dan dat je de data eerst op moet halen, concateneren en de data te overschrijven in de DB.

Tweede mogelijkheid is gebruik maken van de string-operaties van MySQL zelf. Ben niet heel erg bekend met MySQL dus daar zou je zelf even op moeten zoeken.

Wat ik persoonlijk het mooist vind is om een tabel met alleen de tags te maken (id, tag) en een tabel met de documenten (id, ...). De documenttabel en de tagtabel zou je nu kunnen linken via een koppeltabel. Iedere tag wordt een keer opgeslagen en je kunt makkelijk de relaties tussen documenten en tags updaten/toevoegen/verwijderen. Statistieken genereren en zoeken worden ook een stuk eenvoudiger.

[ Voor 5% gewijzigd door rrrandy op 26-12-2006 14:58 ]


Verwijderd

Topicstarter
Ik begrijp het laatste niet helemaal goed,

Bedoel je het zo?

Een tabel aanmaken:

CREATE TABLE `vervoer` (
`vervoer1` varchar(255) NOT NULL default '',
`vervoer2` varchar(255) NOT NULL default '',
`vervoer3` varchar(255) NOT NULL default '',
`vervoer4` varchar(255) NOT NULL default '',
) TYPE=MyISAM;

En dan de regels daar in te voegen?

vervoer1 > auto
vervoer2 > fiets
vervoer3 > brommer
vervoer 4 > vliegtuig.

Hoe kan ik er dan voor zorgen dat hij eerst weet dat hij in vervoer1 moet invoegen en daarna in vervoer2, enz?

Als ik het verkeerd heb begrepen moet je mij even zeggen. :)

Alvast bedankt,

Maxxie.

  • tombo_inc
  • Registratie: December 2004
  • Laatst online: 04-02-2022

tombo_inc

uhuh

wat je het beste kan proberen is denk ik met een subquery de waarde die al bestaat op te halen, en dan vervolgens met de mysql concat functie die huidige en nieuwe waarde aan mekaar plakken en dan updaten. volgens mij moet dat wel in 1 query kunnen.
voor info over concat zie hier: http://dev.mysql.com/doc/refman/5.0/en/string-functions.html

offtopic:
het opslaan van waarden op zo'n manier als jij doet is niet echt netjes. daarom kom je ook dit soort problemen tegen. je kan beter een aparte tabel maken voor dit meerwaardige attribuut vervoer.

Microsoft Windows: A thirty-two bit extension and graphical shell to a sixteen-bit patch to an eight-bit operating system originally coded for a four-bit microprocessor which was written by a two-bit company that can't stand one bit of competition


Verwijderd

Topicstarter
tombo_inc schreef op dinsdag 26 december 2006 @ 15:10:
wat je het beste kan proberen is denk ik met een subquery de waarde die al bestaat op te halen, en dan vervolgens met de mysql concat functie die huidige en nieuwe waarde aan mekaar plakken en dan updaten. volgens mij moet dat wel in 1 query kunnen.
voor info over concat zie hier: http://dev.mysql.com/doc/refman/5.0/en/string-functions.html

offtopic:
het opslaan van waarden op zo'n manier als jij doet is niet echt netjes. daarom kom je ook dit soort problemen tegen. je kan beter een aparte tabel maken voor dit meerwaardige attribuut vervoer.
Laten we zeggen dat ik het in in allemaal andere velden laat invoegen, zoals ik in mijn 2de post heb beschreven.

Hoe kan ik dan het probleem oplossen dat er in vervoer1 als auto staat, en dus in vervoer2 bijvoorbeeld brommer moet komen te staan?

Alvast bedankt,

Maxxie.

  • rrrandy
  • Registratie: Juli 2005
  • Laatst online: 27-06 13:00
Verwijderd schreef op dinsdag 26 december 2006 @ 15:09:
Ik begrijp het laatste niet helemaal goed,

Bedoel je het zo?

Een tabel aanmaken:

CREATE TABLE `vervoer` (
`vervoer1` varchar(255) NOT NULL default '',
`vervoer2` varchar(255) NOT NULL default '',
`vervoer3` varchar(255) NOT NULL default '',
`vervoer4` varchar(255) NOT NULL default '',
) TYPE=MyISAM;

En dan de regels daar in te voegen?

vervoer1 > auto
vervoer2 > fiets
vervoer3 > brommer
vervoer 4 > vliegtuig.

Hoe kan ik er dan voor zorgen dat hij eerst weet dat hij in vervoer1 moet invoegen en daarna in vervoer2, enz?

Als ik het verkeerd heb begrepen moet je mij even zeggen. :)

Alvast bedankt,

Maxxie.
Nee, ik bedoel het zo:

Document:
idbestand
0bestand1
1bestand2


Tag:
idtag
0auto
1fiets
2brommer


En dan op de volgende manier koppelen.

Bestand_tag:
bestand_idtag_id
01
02
10
12
Pagina: 1