Skip to main content

Show Posts

This section allows you to view all Show Posts made by this member. Note that you can only see Show Posts made in areas you currently have access to.

Messages - kupak51

1
General Discussion / "Relations Master Detail", have problemm, Help
Greetings.
I have a problem that drives me crazy. I have a table called "agenda" that has a relationship with another table "historial", that relationship is of the Master Detail type.
Pressing should show all those histoiral related to that patient. That is what I wish.
and this is what appears:


Error 500
Server Error
Exception Traces
This will only be displayed in DEVELOPMENT_MODE.
Error Message
SQLSTATE[23000]: Integrity constraint violation: 1052 Column 'ID_Paciente' in where clause is ambiguous
File
D:\WEB\htdocs\agenew\app\models\PDODb.php On Line 1045
Stack Trace
1 D:\WEB\htdocs\agenew\app\models\PDODb.php(1045): PDOStatement->execute()
...

THE Query
SELECT SQL_CALC_FOUND_ROWS  historial.ID_HIST, pacientes.FOTO_Pac AS pacientes_FOTO_Pac, historial.Nro_Historia, CONCAT(pacientes.Nombre,' ',pacientes.Apellido) AS NomApePac, historial.ID_Paciente, CONCAT(medico_tratante.Nombre,' ',medico_tratante.Apellido) AS NomApeMed, historial.Fecha, historial.Motivo, historial.Tratamiento, historial.Resultado, historial.Notas, historial.Honorarios, historial.Cancelados FROM historial INNER JOIN pacientes ON historial.ID_Paciente = pacientes.ID_Paciente INNER JOIN medico_tratante ON historial.ID_Medico_Tratante = medico_tratante.ID_MedTrat INNER JOIN procedimiento ON historial.id_Proc = procedimiento.ID_Procedimiento WHERE  ID_Paciente = 4  ORDER BY historial.ID_HIST DESC  LIMIT 20 OFFSET 0

and you are right, it is ambiguous, there are many "ID_Paciente".

26 / 5.000
Resultados de traducción
The correct query is this:
SELECT SQL_CALC_FOUND_ROWS  historial.ID_HIST, pacientes.FOTO_Pac AS pacientes_FOTO_Pac, historial.Nro_Historia, CONCAT(pacientes.Nombre,' ',pacientes.Apellido) AS NomApePac, historial.ID_Paciente, CONCAT(medico_tratante.Nombre,' ',medico_tratante.Apellido) AS NomApeMed, historial.Fecha, historial.Motivo, historial.Tratamiento, historial.Resultado, historial.Notas, historial.Honorarios, historial.Cancelados FROM historial INNER JOIN pacientes ON historial.ID_Paciente = pacientes.ID_Paciente INNER JOIN medico_tratante ON historial.ID_Medico_Tratante = medico_tratante.ID_MedTrat INNER JOIN procedimiento ON historial.id_Proc = procedimiento.ID_Procedimiento WHERE  historial.ID_Paciente = 4  ORDER BY historial.ID_HIST DESC  LIMIT 20 OFFSET 0

This is de SELECT for agenda
SELECT * FROM agenda
INNER JOIN medico_tratante ON agenda.id_MedTrat=medico_tratante.ID_MedTrat
INNER JOIN pacientes ON agenda.Nro_Historia=pacientes.Nro_Historia

and this for historial
SELECT * FROM historial
INNER JOIN pacientes ON historial.ID_Paciente=pacientes.ID_Paciente
INNER JOIN medico_tratante ON historial.ID_Medico_Tratante=medico_tratante.ID_MedTrat
INNER JOIN procedimiento ON historial.id_Proc=procedimiento.ID_Procedimiento

After a step by step DEBUG of the program I have found a controller, HistoriaController.php, the complete information is not passed.
In this line I check the content of the variable and only "Patient_ID" appears, when making the comparison, the generated SQL reads like this:

I modify line 66 in the HistoriaController, and add a reference to the "historial" table.
from this:
66         $db->where($fieldname , $fieldvalue); //filter by a single field name

to this:
66         $db->where($tablename.".".$fieldname , $fieldvalue); //filter by a single field name

Now it works, but every time I do a PREVIEW, and the files are updated and the modification is lost.
I am using PHPRad Clasic V 2.7.3.
I listen to your opinions and advice. For my part I keep a notebook of the points that I must modify in the final version