Forums » Discussions & Questions »
query pgsql - lier fisrtname lastname et exten pour un userfield identique
Ajouté par dudu clx il y a plus de 7 ans
Bonjour,
je cherche à pouvoir afficher un tableau via une requête pgsql (sous un site web en php), qui affiche:
firstname | lastname | exten | userfield
je n'y arrive pas avec les tables userfeatures et call_log,
mais vu que lors d'un export des utilisateurs via .csv, on retrouve tous ces champs, je me dis que c'est possible.
j'ai regardé quelques tables mais impossible de trouver ... même en comptant sur un "inner join" entre 2 tables.
un peu d'aide pour m'aiguiller ?
dans l'idée:
select
firstname as prenom,
lastname as nom,
exten as numero
from "la table magique"
where userfield = "le service"
order by numero asc
;
si en plus je peux avoir les identifiants SIP, ça serait nikel !
je pourrais faire une interface connectée au LDAP où l'utilisateur pourra voir uniquement ses identifiants, au cas où il aient envie d'installer un client sip !
ça donnerai:
firstname | lastname | exten | userfield | sip_username | sip_secret
Merci !
Réponses (4)
RE: query pgsql - lier fisrtname lastname et exten pour un userfield identique - Ajouté par Etienne Allovon il y a plus de 7 ans
Bonjour,
Le lien entre le user (la personne), la ligne (le compte SIP) et l'extension (le numéro) est dans la table user_line
.
La description de la table user_line
avec les clés étrangères :
asterisk=> \d user_line Table "public.user_line" Column | Type | Modifiers --------------+---------+-------------------------------------------------------- id | integer | not null default nextval('user_line_id_seq'::regclass) user_id | integer | line_id | integer | not null extension_id | integer | main_user | boolean | not null main_line | boolean | not null Indexes: "user_line_pkey" PRIMARY KEY, btree (id, line_id) "user_line_user_id_line_id_key" UNIQUE CONSTRAINT, btree (user_id, line_id) Foreign-key constraints: "user_line_extension_id_fkey" FOREIGN KEY (extension_id) REFERENCES extensions(id) "user_line_line_id_fkey" FOREIGN KEY (line_id) REFERENCES linefeatures(id) "user_line_user_id_fkey" FOREIGN KEY (user_id) REFERENCES userfeatures(id)
Pour :
firstname | lastname | exten | userfield
il faut donc faire une jointure entre userfeatures, extensions et user_line
Pour :
firstname | lastname | exten | userfield | sip_username | sip_secret
il faut donc faire une jointure entre userfeatures, linefeatures, extensions et user_line
RE: query pgsql - lier fisrtname lastname et exten pour un userfield identique - Ajouté par dudu clx il y a plus de 7 ans
Merci !!
je débute en pgsql ... avec des "natural join" je n'ai pas réussi, ni en utilisant les "foreign key".
bon, j'arrive à avoir un tableau juste, pas sûr que ça soit la plus belle query possible, mais ça marche:
pour:
exten | firstname | lastname | userfield
query:
select exten, firstname, lastname from user_line, extensions, userfeatures where extensions.id = user_line.extension_id and user_line.user_id = userfeatures.id and userfield = 'dgdsi' order by exten;
dans mon cas, je recherche uniquement le champ userfield = 'dgdsi' (je dis ça pour les copier-coller).
he ben je vais passer à la suivante et ajouter les champs sip_*
je viendrais la partager ici, si jamais ça intéresse un lecteur.
encore merci !
RE: query pgsql - lier fisrtname lastname et exten pour un userfield identique - Ajouté par dudu clx il y a plus de 7 ans
hop, je reviens.
il manquait la table usersip.
voilà une query assez complète:
$query_asterisk = "SELECT
exten AS numero,
firstname AS prenom,
lastname AS nom,
linefeatures.name AS user_sip,
usersip.secret AS password_sip,
provisioningid AS code_appro
FROM user_line, extensions, userfeatures, linefeatures, usersip
WHERE extensions.id = user_line.extension_id
AND user_line.user_id = userfeatures.id
AND extensions.exten = linefeatures.number
AND linefeatures.name = usersip.name
AND linefeatures.number = '$numero'
ORDER BY exten ASC";
j'utilise "AND linefeatures.number = '$numero'" car j'ai un formulaire de recherche par le numéro.
je pense qu'il y a toujours mieux comme query, mais il n'existe pas de foreign key entre user_line et usersip.
bizarre ...
bon,
gourmand comme je suis, je vais tenter d'ajouter l'adresse ip de la terminaison
(comme ça le support pourra trouver l'ip et savoir si le téléphone est sur le réseau, au lieu de me déranger pour rien )
Mais c'est pas gagné, pas d'adresse ip trouvé dans les tables que me retourne:
select table_name from INFORMATION_SCHEMA.COLUMNS
where COLUMN_NAME like '%addr%'
order by TABLE_NAME;
logiquement, il doit exister un lien entre usersip et l'adresse ip, mais je vois pas où.
et rien dans le row "ipaddr" de la table "usersip", c'est vide !
Une idée où je peux choper l'adresse IP de la terminaison d'une ligne ??
Et j'y pense, faudrait que je pense à ajouter le username et password du CTI profil également.
Merci !
RE: query pgsql - lier fisrtname lastname et exten pour un userfield identique - Ajouté par dudu clx il y a plus de 7 ans
Up,
Bon impossible de retrouver une terminaison et son IP sur la database asterisk ...
Si quelqu'un sait, merci de passer par là.
Pour ceux que ça intéresse, voici une requête qui est presque celle de l'export des utilisateurs en .csv
Malheureusement, je me rend compte que ceux qui n'ont pas de terminaison (client sip et non un téléphone) n'apparaissent pas dans le résultat.
Donc si quelqu'un veut corriger cela:
`SELECT userfeatures.uuid AS uuid, userfeatures.entityid AS entity_id, userfeatures.firstname AS firstname, userfeatures.lastname AS lastname, userfeatures.email AS email, userfeatures.mobilephonenumber AS mobile_phone_number, userfeatures.outcallerid AS outgoing_caller_id, userfeatures.language AS language, userfeatures.ringseconds AS ring_seconds, userfeatures.simultcalls AS simultaneous_calls, userfeatures.enablehint AS supervision_enabled, userfeatures.enablexfer AS call_transfer_enabled, userfeatures.userfield AS userfield, userfeatures.loginclient AS username, userfeatures.passwdclient AS password, cti_profile.name AS cti_profile_name, userfeatures.enableclient AS cti_profile_enabled, voicemail.fullname AS voicemail_name, voicemail.mailbox AS voicemail_number, voicemail.context AS voicemail_context, voicemail.password AS voicemail_password, voicemail.email AS voicemail_email, voicemail.attach AS voicemail_attach_audio, voicemail.deletevoicemail AS voicemail_delete_messages, voicemail.skipcheckpass AS voicemail_ask_password, usersip.protocol AS line_protocol, linefeatures.provisioningid AS provisioning_code, extensions.context AS context, linefeatures.name AS sip_username, usersip.secret AS sip_secret, extensions.exten AS exten, linefeatures.number AS incall_exten, string_agg(rightcall.name, ';') AS call_permissions FROM user_line, extensions, userfeatures, linefeatures, usersip, voicemail, rightcallmember, rightcall, cti_profile WHERE user_line.extension_id = extensions.id AND user_line.user_id = userfeatures.id AND user_line.user_id = linefeatures.id AND linefeatures.number = extensions.exten AND linefeatures.name = usersip.name AND userfeatures.voicemailid = voicemail.uniqueid AND rightcallmember.rightcallid = rightcall.id AND rightcallmember.typeval = extensions.typeval AND userfeatures.cti_profile_id = cti_profile.id GROUP BY 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 ORDER BY exten ASC;`
Merci !