Hoi, ik ben bezig met de laatste stap van een script. ik heb een tabel met verscillende data. maar in die tabel staat een kolom 'nummer'. deze nummers hebben een status open of closed.
nu heb ik een andere tabel waar alleen nummers en een datum staan. Al deze nummers kunnen in die andere tabel de status closed krijgen. nu wilde ik dat dus doen met de volgende query maar daar heb ik wat hulp bij nodig. ik dacht aan zoiets:


<body>
 </p>
  <table width="213" border="0" align="center">
    <tr>
      <td width="207"><input type="submit" name="nummer" value="bevestig" /></td>
    </tr>
      </table>
  <p>&nbsp;</p>
  <p>&nbsp;</p>
  <p>
<form name="nummer" action="<?php echo $_SERVER['PHP_SELF'];?>" method="post">
<?php
if($_SERVER['REQUEST_METHOD'] == "POST"){
    if(isset($_POST['nummer']) != NULL){//ticketnummer aangevinkt, value meegegeven
        $sql="UPDATE
			ft_form_7
        SET
            status='closed' AND 
        WHERE 
			ft_form_7.nummer = case.nummer"; 
            
			
        //echo "$sql";
        if(!mysql_query($sql)){
           echo 'Er is een fout opgetreden: '.mysql_error();
           }
        else{
          if(mysql_affected_rows() > 1){
           echo 'Er zijn '.mysql_affected_rows().' rijen aangepast.';
           }
          else{
            echo 'Er is 1 rij aangepast.';
                
            }
        }
    }
}


foreach ($_POST as $key=>$waarde)
{
   echo $key.": ".$waarde."<br/>\n";
} 
?> 
</form>
</body>
Die query wordt dan iets lastiger:

UPDATE ft_form_7
SET status = 'closed'
WHERE nummer IN (
    SELECT nummer
    FROM andere_tabel )

Wat doet deze query?

Met die laatste subquery worden alle nummers uit die andere tabel opgehaald, de nummers die in ft_form_7 dus gesloten kunnen worden. Vervolgens worden die gegevens gebruikt in een IN() statement.

Dat zorgt ervoor dat alle nummers uit ft_form_7 die ook voorkomen in de andere tabel gematched en dus gesloten worden.
ik begrijp de bedoeling maar krijg toch een foutmelding in de query:

Er is een fout opgetreden: 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 'case )' at line 5nummer: bevestig


volgens mij is de query nog niet af of zie ik dat verkeerd?
Laat je query eens zien, want ik gebruik namelijk helemaal geen 'case' in mijn query of is dat soms de tabelnaam?
Dat is inderdaad de tabelnaam. En in een keer dacht ik dat ik er was. Maar nu past hij gewoon niks aan. Mijn echo zegt '1 rij aangepast' maar die liegt.
Dit is wat ik nu heb:


<body>
 </p>
  
  <p>&nbsp;</p>
  <p>&nbsp;</p>
  <p>
<form name="nummer" action="<?php echo $_SERVER['PHP_SELF'];?>" method="post">
<?php
if($_SERVER['REQUEST_METHOD'] == "POST"){
    if(isset($_POST['close']) != NULL){//ticketnummer aangevinkt, value meegegeven
        $sql="UPDATE ft_form_7
SET status = 'closed'
WHERE nummer= 'IN (
    SELECT nummer
    FROM case)'"; 
            
			
        //echo "$sql";
        if(!mysql_query($sql)){
           echo 'Er is een fout opgetreden: '.mysql_error();
           }
        else{
          if(mysql_affected_rows() > 1){
           echo 'Er zijn '.mysql_affected_rows().' rijen aangepast.';
           }
          else{
            echo 'Er is 1 rij aangepast.';
                
            }
        }
    }
}


/*foreach ($_POST as $key=>$waarde)
{
   echo $key.": ".$waarde."<br/>\n";
} */
?> 
<table width="213" border="0" align="center">
    <tr>
      <td width="207"><input type="submit" name="close" value="bevestig" /></td>
    </tr>
      </table>
</form>
</body>
</html>
Ja maar die query klopt ook niet. Kijk eens goed naar de query die ik je gegeven heb, en dan naar je eigen...

Jij hebt daar staan WHERE nummer = 'IN ... ', maar zo klopt het niet. Die = en die quotes moeten daar weg. Het is toch geen string die je daar neerzet, het is een bewerking waar een resultaat uit rolt.
ok maar ik was wat aan het prutsen en het werkte namelijk niet voordat ik die = en ' had neergezet. heb ik nu nogmaals maar dan krijg ik dit:

Er is een fout opgetreden: 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 'case)' at line 5
dus dit komt uit deze query:

$sql="UPDATE ft_form_7
SET status = 'closed'
WHERE nummer IN (
    SELECT nummer
    FROM case)";
Ja, ik weet al waardoor dat komt. Case is een gereserveerde naam en die mag je dus niet als tabelnaam gebruiken!

Je zult die tabel dus een andere naam moeten geven.
Jeppie ahjee Blanche... !! het werkt. Maar om het af te ronden zou ik graag ook die 2e kolom mee willen geven. Ik heb die tabel net nieuw gemaakt en 'sluit ' genoemd. in die eerste kolom staat dus het nummer en die 2e kolom bevat de close datum. Die datum staat nu dus leeg in die andere tabel ft_form_7.Kan ik in diezelfde query dan dit er bij in proppen?
Ja, dan zul je het weer iets anders aan moeten pakken:

UPDATE
    ft_form_7 AS f,
    sluit AS s
SET
    f.status = 'closed',
    f.datum = s.datum
WHERE
   f.nummer = s.nummer
Blanche,

Zo vind ik het veel netter en begrijpelijker. Alles werkt nu zoals ik had gewild.

Hartelijk dank voor je support !!!

Reageren