Update query

Status
Niet open voor verdere reacties.

paashaas

Gebruiker
Lid geworden
11 aug 2007
Berichten
5
Ik wil graag een update query maken die meerder records bij werkt.

Ik maak gebruik van MySQL versie 4.
Ik heb 2 tabellen nl. Clubs (80 records) en Teams (300 records).

TABEL: Clubs heeft de velden: Id, Name
Enkele records zijn:
1 Apeldoorn
2 Deventer
3 Mezen, de
4 Tempo '41


TABEL: Teams heeft de velden: Id, Name, Club_id
Enkele records zijn:
1 Tempo '41 D1 0
2 Tempo '41 D2 0
3 Mezen A1 0
4 Apeldoorn A2 0

Nu wil ik met een UPDATE query het veld "Club_id" wijzigen in de waarde "id" uit de tabel Clubs.

Ik zal eerst een string bewerking moeten maken zodat Club.Name=Team.Name
Onderstaande query ahd ik bedacht:
SELECT *
FROM
(SELECT LOWER(REVERSE(SUBSTRING(REVERSE(`jos_joomleague_teams`.`name`),2+LENGTH(REVERSE(SUBSTRING_INDEX(REVERSE(`jos_joomleague_teams`.`name`)," ",1)))))) AS TEAMNAAM FROM `jos_joomleague_teams`) AS A,
(SELECT LOWER(SUBSTRING_INDEX(`jos_joomleague_clubs`.`name`,",",1)) AS `CLUBNAAM` FROM `jos_joomleague_clubs`) AS B
WHERE TEAMNAAM=CLUBNAAM

Maar ik krijg die UPDATE query niet voor elkaar. Is er iemand die mij daarbij op weg kan helpen? :confused:
 
Laatst bewerkt:
Volgens mij moet je dan aan onderstaande genoeg hebben.

UPDATE teams SET Club_ID = 1 WHERE Name LIKE 'Apeldoorn%' ;

Het % teken is in MySQL trouwens wat * is in zoekfuncties (zoals dir *.txt in de dos-prompt)

Grts Cotje
 
Volgens mij moet je dan aan onderstaande genoeg hebben.

UPDATE teams SET Club_ID = 1 WHERE Name LIKE 'Apeldoorn%' ;

Het % teken is in MySQL trouwens wat * is in zoekfuncties (zoals dir *.txt in de dos-prompt)

Grts Cotje

Hoi Cotje,

Dan moet ik alle 80 records stuk voor stuk af, want dan moet ik iedere keer een andere string voor LIKE ".......%" gaan invullen en boven dien moet ik eerst nogeens het juiste ID in de tabel Clubs opzoeken. Is er niet een manier om ook dat te automatiseren?

Thanks!
 
Hoi Cotje,

Dan moet ik alle 80 records stuk voor stuk af, want dan moet ik iedere keer een andere string voor LIKE ".......%" gaan invullen en boven dien moet ik eerst nogeens het juiste ID in de tabel Clubs opzoeken. Is er niet een manier om ook dat te automatiseren?

Thanks!

Ik weet niet of dit in MySQL mogelijk is, maar gebruik je bijvoorbeeld MySQL in combinatie met PHP dan is het zeker heel goed mogelijk.
 
Ik zie trouwens dat dit dan niet zou gaan werken voor het team Mezen. In de tabel clubs heten ze namelijk "Mezen, de" en bij de teamnamen staat alleen "Mezen"
 
Ik weet niet of dit in MySQL mogelijk is, maar gebruik je bijvoorbeeld MySQL in combinatie met PHP dan is het zeker heel goed mogelijk.

Uiteindelijk wil ik het zeker in een PHP script zetten, maar ook daar weet ik nog niet hoe ik dat in PHP moet doen. Ik heb wel gezien dat je met MYSQL SQL Query's om kunt zetten naar PHP, vandaar dat ik het eerst in SQL voor elkaar wilde hebben en het dan met MYSQL server om laten zetten naar PHP.

Ik ben aan het stoeien geweest met diverse JOINS boven op de stringbewerkingsfunctie (eigenlijk soor subqueries aan het bouwen), maar kreeg het niet voor elkaar.
Na meerdere dagen proberen ben ik nu maar eens de vraag in een forum gaan stellen.

Thnks
 
Ik zie trouwens dat dit dan niet zou gaan werken voor het team Mezen. In de tabel clubs heten ze namelijk "Mezen, de" en bij de teamnamen staat alleen "Mezen"

Dat heb je goed. Daarom moest ik al zo'n ingewikkelde string vergelijking bouwen.
Door die afwijking moest ik eerst de strings omdraaien en vervolgens tot en met de spatie eraf knippen.
 
In PHP zou je zoiets kunnen bouwen. Over het probleem met de namen moet ik nog even nadenken :D

PHP:
$link = mysqli_connect($host, $user, $pass, $db);
$query1 = "select * from Clubs;"
$result1 = mysqli_query($link,$query1);
while ($row1 = mysqli_fetch_array($result1))
{
  $query2 = "UPDATE Teams SET Club_ID = $row1[Id] WHERE Name = '$row1[Name];"
  if (mysqli_query($link,$query2))
  {
    \\ succesvol uitgevoerd
  } else {
    \\fout opgetreden
  }
}
 
Code:
UPDATE 
Teams as t,
Clubs as c
SET t.Club_id = c.Id 
WHERE c.Name LIKE CONCAT(t.Name, '_%' )

Zoiets moet het worden denk ik.... Heb het niet getest ;)
 
Code:
UPDATE 
Teams as t,
Clubs as c
SET t.Club_id = c.Id 
WHERE c.Name LIKE CONCAT(t.Name, '_%' )

Zoiets moet het worden denk ik.... Heb het niet getest ;)

Hoi Koos,

Ik heb hem voor elkaar!!!
Het was bijna goed wat je schreef. Moest alleen in de where clausule c.Name en t.Name omdraaien en zorgen voor de juiste string vergelijking.
Uiteindelijk is het dit geworden:

UPDATE jos_joomleague_teams as t, jos_joomleague_clubs as c
SET t.club_id = c.id
WHERE (LOWER(REVERSE(SUBSTRING(REVERSE(t.name),2+LENGTH(REVERSE(SUBSTRING_INDEX(REVERSE(t.name)," ",1))))))) = (LOWER(SUBSTRING_INDEX(c.name,",",1)))


Nogmaals Bedankt! :thumb:

Cotje ook JIJ geweldig bedankt, nu moet ik bovenstaande query nog omzetten naar PHP. :thumb:

Thanks! :)
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan