[PHP/MySQL] subquery alternatief

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ik moet de volgende query uitvoeren in PHP, maar ik kwam tot de ontdekking dat mijn versie van MySQL geen subqueries ondersteunt (en updaten is geen mogelijkheid):

$sql = 'DELETE FROM verlofaanvragen WHERE einddatum < '.$cdatum.' AND userid IN ("SELECT username FROM users WHERE afdeling = '.$afdeling.'")';

Ik heb geprobeerd om de resultaten van de subquery in een array te plaatsen en daar doorheen te loopen, maar dit zonder resultaat.

Iemand suggesties?

Acties:
  • 0 Henk 'm!

Verwijderd

Kijk eens in de mysql manual bij joins

[edit]
trouwens, userid in usernaam, lijkt me vreemd.

[ Voor 44% gewijzigd door Verwijderd op 20-04-2004 16:42 ]


Acties:
  • 0 Henk 'm!

Verwijderd

Probeer dit eens:

$sql = 'DELETE FROM verlofaanvragen a
,('SELECT username FROM users WHERE afdeling = '.$afdeling.') b
WHERE a.einddatum < '.$cdatum.'
AND a.userid = b.username';

Acties:
  • 0 Henk 'm!

  • djluc
  • Registratie: Oktober 2002
  • Laatst online: 14:28
Verwijderd schreef op 20 april 2004 @ 16:52:
Probeer dit eens:

$sql = 'DELETE FROM verlofaanvragen a
,('SELECT username FROM users WHERE afdeling = '.$afdeling.') b
WHERE a.einddatum < '.$cdatum.'
AND a.userid = b.username';
De Ts kan niet werken met een subquery 8)7

Acties:
  • 0 Henk 'm!

Verwijderd

Kun je wel view's aanmaken?
code:
1
2
create view temp as select username from users where afdeling = ".$afdeling";
delete from verlofaanvragen where einddatum < ".$cdatum" and userid in temp;

Daarna kun je de view weer droppen natuurlijk...

[ Voor 19% gewijzigd door Verwijderd op 21-04-2004 09:56 ]


Acties:
  • 0 Henk 'm!

Verwijderd

Ik ga het zelf niet allemaal testen, maar even uit het hoofd:

in delete queries kun je geloof ik geen join doen. Dat zou je moeten proberen. Anders gewoon een select maken, en daarna alle geretourneerde id's deleten via een lusje.

Zoiets misschien: (de tabellen en de bedoeling zijn me niet duidelijk maar misschien heb je hier wat aan als start)

SELECT ....velden.... FROM verlofaanvragen RIGHT JOIN users ON (users.afdeling = ..... AND users.id = verlofaanvragen.user_id) WHERE verlofaanvragen.einddatum < ......

De puntjes en veldnamen moet je zelf even naar kijken.

Acties:
  • 0 Henk 'm!

Verwijderd

Nu ik er nog eens naar kijk, waarom niet gewoon zo:
SELECT verlofaanvragen.id FROM verlofaanvragen, users WHERE verlofaanvragen.einddatum < ..... AND verlofaanvragen.user_id = users.id AND users.afdeling_id = .....

Daarna die id's deleten.

Acties:
  • 0 Henk 'm!

  • klokop
  • Registratie: Juli 2001
  • Laatst online: 16-09 19:21

klokop

swiekie swoeng

Zoiets kan toch?
code:
1
2
3
4
5
6
7
8
9
10
delete from
  verlofaanvragen v
left join
  users u
on 
  v.userid = u.username
WHERE 
  u.afdeling = $afdeling
AND
  v.einddatum < $cdatum

"Passing silhouettes of strange illuminated mannequins"

Pagina: 1