Wie kan mij helpen met de query??

UPDATE QUERY
tabel 1 (basis)
basis_id basis_aantal doel_aantal
1 4 0
2 4 0
3 4 0


tabel 2 (data)
data_id basis_id
1 1
2 1
3 1
4 2
5 2

tabel1.basis_id = tabel2.basis_id

Ik wil nu het veld doel_aantal in tabel1 vullen met het aantal keer dat basis_id dat voorkomt in tabel2.
Dus tabel1.basis_id 1 veld doel_aantal wordt 3
tabel1.basis_id 2 veld doel_aantal wordt 2
tabel1.basis_id 3 veld doel_aantal blijft 0
Zoiets ?

update tabel_1 set doel_aantal = (select count(tabel_2.basis_id) from tabel_2 where tabel_2.basis_id = 1) where basis_id = 1;




[size=xsmall]Toevoeging op 06/05/2019 13:41:57:[/size]

En als je er een procedure van maakt hoef je alleen de id op te geven en je krijgt het bijgewerkte resultaat terug.

DROP PROCEDURE IF EXISTS `tabel`;;
CREATE PROCEDURE `tabel`(IN `tabelId` int)
BEGIN
UPDATE tabel_1 SET doel_aantal = (SELECT COUNT(tabel_2.basis_id) FROM tabel_2 WHERE tabel_2.basis_id = tabelId) WHERE basis_id = tabelId;
SELECT * FROM tabel_1 WHERE basis_id = tabelId;
END;;



Zie ik dan toch nog iets over het hoofd. Ik krijg onderstaande foutmelding.
basisi=tabel1
data=tabel2

$sql ="UPDATE basis ";
$sql.="SET doel_aantal = (SELECT COUNT(data.basis_id FROM data WHERE data.basis_id = 1) ";
$sql.="WHERE basis_id = 1 ";
$rs_sql = mysqli_query($verbinding,$sql) or die(mysqli_error());

//Warning: mysqli_error() expects exactly 1 parameter, 0 given in
'Or die' is niet de meest nette manier van foutafhandeling, maar wat betreft je warning, je vergeet je mysqli connectie mee te geven: mysqli_error($verbinding)

Wat betreft je andere query, je sluit je COUNT( niet af.
Boven in het script wordt de verbinding geopend dat kan de reden van de foutmelding niet zijn.

if(!$verbinding){trigger_error('Fout bij verbinden met database: '.mysqli_connect_error());exit();}
Ja je hebt wel verbinding, maar deze geef je niet mee aan de 'mysqli_error' functie, waardoor de PHP warning getoond wordt in plaats van de sql error.
Oke, nu wel meegegeven.

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 'FROM data WHERE data.basis_id = 1) WHERE basis_id = 1' at line 1
Heb je ook mijn andere opmerking gezien over de COUNT?
Wel gezien, de andere query is niet van mijzelf maar aangereikt door Adopive Solution. Ik weet helaas niet hoe ik COUNT moet afsluiten.

Als de syntax als volgt gebruik;

$sql="UPDATE basis SET doel_aantal = (SELECT COUNT(data.basis_id) FROM data WHERE data.basis_id = 1) WHERE basis_id = 1 ";

$rs_sql = mysqli_query($verbinding,$sql) or die(mysqli_error($verbinding));
krijg ik geen foutmelding meer. Het bedoelde veld dat aangepast zou moeten worden wordt echter niet geupdate.

[size=xsmall]Toevoeging op 06/05/2019 15:36:02:[/size]

Oke, nu zie ik het. Met afsluiten bedoel je )


[size=xsmall]Toevoeging op 06/05/2019 15:37:24:[/size]

Nu werkt het. Allen bedankt voor de info. Daar was ik zelf niet uitgekomen.
Enkele kanttekeningen.

Alleen basis_id 1 is nu bijgewerkt met deze data? Dit zou je dus voor alle basis_id's moeten doen die voorkomen in tabel #2?

doel_aantal in tabel #1 is in wezen redundante informatie. Wat als deze informatie ondertussen verandert in tabel #2? Hoe houd je dit synchroon, of kan dat niet gebeuren? Persoonlijk zou ik ook gebruik maken van transacties voor dit soort queries.

En waarom houd je dit niet direct bij in tabel #1, desnoods in een aparte kolom. Of je maakt een trigger, zodat als er een rij wordt toegevoegd in tabel #2, je dit direct verwerkt in (al dan niet die extra kolom) in tabel #1.

Punt is, je creƫert nu zelf overhead en daarmee extra complexiteit. Is deze overhead echt noodzakelijk?
Klopt, is ook meer een eenmalige opschoon actie.
Is inderdaad ook bij te houden bij invoer maar en kan niet alleen worden toegevoegd maar ook weer verwijderd. Ook daar moet dan in beide tabellen gemuteerd worden. Maar bedankt voor de tip.

Reageren