Check alle échte Black Friday-deals Ook zo moe van nepaanbiedingen? Wij laten alleen échte deals zien

[PHP/MySQL] Krijg query niet kloppend

Pagina: 1
Acties:

  • Joep
  • Registratie: December 2005
  • Laatst online: 19:06
Me again :>

Onderstaande code selecteert de agents die een bepaald contract hebben en de authorizations die horen bij dat contract, behalve de authorizations die de agents al hebben en maakt de agents vervolgens lid van de authorizations. Dit omdat er een paar uitzonderingen zijn op de databasestructuur die ik met behulp van aangepaste queries (zoals deze) wil opvangen.

SQL:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
INSERT INTO         agent_authorization (agent_id, authorization_id) 

SELECT DISTINCT     agent_contract.agent_id, ad_group.authorization_id 
FROM                ad_group, agent_contract 
WHERE               agent_contract.contract_id = '$_POST[id]' 
AND                 ad_group.contract_id = '$_POST[id]' 
AND                 ad_group.authorization_id NOT IN (
                                                        SELECT      agent_authorization.authorization_id 
                                                        FROM        agent_authorization 
                                                        WHERE       agent_id IN (
                                                                                    SELECT      agent_id 
                                                                                    FROM        agent_contract 
                                                                                    WHERE       contract_id = '$_POST[id]'
                                                                                 )
                                                      )


Database structuur:
Afbeeldingslocatie: http://tweakers.net/ext/f/ZWVjubSo6rwBHg1F6zPlKiAe/medium.png

Inhoud van agent_authorization:
Afbeeldingslocatie: http://tweakers.net/ext/f/IWw1NV68vQnl66n4gVVicZBU/full.png

Het probleem is dat als één of meer agents van dat bepaalde contract al lid zijn van een bepaalde authorization (in dit geval authorization_id 22 die alleen agent 512554 heeft) dat ie niet wordt toegevoegd aan de agent(s) die er niet lid van zijn. Ik wil juist dat de query dat wel doet. Nu werkt de query alleen als alle agents dezelfde authorizations hebben, maar niet als er een verschil is. Ik heb vanalles al geprobeerd maar het lukt me niet. Ik heb naast $_POST[id] (contract_id) ook de beschikking over $_GET[id] (team_id).

Iemand? :)

  • Rotterdammertje
  • Registratie: Juni 2002
  • Laatst online: 28-03-2023
Je filtert nu alle autorization ids weg die al aan 1 of meer agents met het specifieke contract zijn toegekend. Je moet in plaats daarvan de autorization ids wegfilteren die nog niet zijn toegekend aan de huidige agent. Met andere woorden: in plaats van te zeggen "where agent_id in (alle agents behorende bij het contract)" kan je zeggen "where agent_id = ..." Wat er op de puntjes moet komen moet niet al te moeilijk zijn. :)

main = putStr (q ++ show q); q = "main = putStr (q ++ show q); q = "


  • NMe
  • Registratie: Februari 2004
  • Laatst online: 20-11 11:59

NMe

Quia Ego Sic Dico.

Ik mag hopen dat je niet daadwerkelijk $_POST[id] in je query afdrukt zonder enige vorm van escaping? Als dat wel zo is: meteen mee ophouden en eerst iets gaan lezen over databasenormalisatie en prepared statements.

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


  • Joep
  • Registratie: December 2005
  • Laatst online: 19:06
@ Rotterdammetje: bedankt. Zal 't zo eens proberen.

@ NMe: Databasenormalisatie beheers ik goed genoeg. De structuur zoals die nu staat is in orde en heeft geen redundante velden. Prepared statements ga ik nadat ik dit heb opgelost implementeren.