update query met voorwaarde vanuit andere tabel

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Rob

Rob

07/06/2007 12:35:00
Quote Anchor link
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:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
<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>
 
PHP hulp

PHP hulp

20/11/2024 11:38:58
 
Joren de Wit

Joren de Wit

07/06/2007 13:02:00
Quote Anchor link
Die query wordt dan iets lastiger:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
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.
 
Rob

Rob

07/06/2007 13:22:00
Quote Anchor link
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?
 
Joren de Wit

Joren de Wit

07/06/2007 13:35:00
Quote Anchor link
Laat je query eens zien, want ik gebruik namelijk helemaal geen 'case' in mijn query of is dat soms de tabelnaam?
Gewijzigd op 01/01/1970 01:00:00 door Joren de Wit
 
Rob

Rob

07/06/2007 13:43:00
Quote Anchor link
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:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
<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>
 
Joren de Wit

Joren de Wit

07/06/2007 13:49:00
Quote Anchor link
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.
 
Rob

Rob

07/06/2007 13:52:00
Quote Anchor link
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:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
$sql="UPDATE ft_form_7
SET status = 'closed'
WHERE nummer IN (
    SELECT nummer
    FROM case)";
Gewijzigd op 01/01/1970 01:00:00 door Rob
 
Joren de Wit

Joren de Wit

07/06/2007 13:59:00
Quote Anchor link
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.
 
Rob

Rob

07/06/2007 14:17:00
Quote Anchor link
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?
Gewijzigd op 01/01/1970 01:00:00 door Rob
 
Joren de Wit

Joren de Wit

07/06/2007 14:53:00
Quote Anchor link
Ja, dan zul je het weer iets anders aan moeten pakken:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
UPDATE
    ft_form_7 AS f,
    sluit AS s
SET
    f.status = 'closed',
    f.datum = s.datum
WHERE
   f.nummer = s.nummer
 
Rob

Rob

07/06/2007 15:03:00
Quote Anchor link
Blanche,

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

Hartelijk dank voor je support !!!
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.