chris hermansen <clherman...@gmail.com> ezt írta (időpont: 2025. ápr. 24.,
Cs, 20:07):

> Kosza and list,
>
> On Thu, Apr 24, 2025 at 3:34 AM Kosza Antal via QGIS-User <
> qgis-user@lists.osgeo.org> wrote:
>
>> Hello everyone,
>>
>> I want to implement the following in qgis
>>
>> Given 3 geopackage tables, one is the findings, the second is the type,
>> the third is the material, and the fourth is the findings_material. The
>> latter is a connecting table between the type and the material. The tables
>> refer to each other with foreign keys. The foreign key is of type uuid.
>>
>> The task: in qgis, the findings table needs to be edited, the findings
>> field refers to the type uuid with a foreign key, the material field refers
>> to the uuid key of the material table. qgis automatically recognizes the
>> relationships and sets up a relation reference widget.
>>
>> What I want: when I select the finding, i.e. the corresponding value from
>> the type table, in the material it should filter the values based on the
>> pivot table.
>> This is how it looks in sql.
>>
>> SELECT
>> a.uuid AS material_uuid,
>> a.values AS material_values
>> FROM
>> material AS a
>> JOIN
>> result_material AS pivot ON a.uuid = pivot.material_fk
>> WHERE
>> pivot.characteristic_fk = '6c5356d0-3257-49ed-8f95-4262d33175c9';
>>
>> Just wondering if you could create a view based on your SELECT statement
> that is editable (I've not done this in SQLite so I have no idea if it's
> possible).
>
> Looking at your SQL vs your description, I'm not following.  You say "the
> findings table needs to be edited"... Then it seems to me you need a SELECT
> statement like this:
>
> SELECT f.*,t.*,m.*
> FROM findings AS f
> JOIN type AS t ON f.type_uuid = t.uuid
> JOIN material AS m ON f.material_uuid = m.uuid
>
> I don't understand the purpose of the table you call "findings_material"
> in one place and "result_material" in another and which you say is "a
> connecting table between the type and the material".  It seems to me the
> findings table connects type and material (as per my SELECT statement).
> Are you using it to restrict the combinations of type and material?  If
> that's the case, then you should probably relate the findings table to that
> restricting table rather than type and material directly.  I would probably
> choose to call that restricting table something like
> "allowed_type_material" and have a field on findings that was called
> "allowed_type_material_uuid".
>
> Sorry that I'm not finding your problem description clear; I hope my
> comments don't add confusion.
>
>
>
> --
> Chris Hermansen · clhermansen "at" gmail "dot" com
>
> C'est ma façon de parler.
>

Sorry, I really worded it confusingly, the table names are in Hungarian, I
overlooked something, let me clarify

The main table is the findings, in which the "type" column is a foreign key
to the "uuid" column of the types table, the material column is a foreign
key to the "uuid" column of the material table
1. table - findings
2. table - types
3. table - material
4. table - findings material (connecting table), N:M relationship

The sql query:

SELECT
a.uuid AS material_uuid,
a.values AS material_value
FROM
material AS a
JOIN
findings_material AS pivot ON a.uuid = pivot.material_fk
WHERE
pivot.types_fk = '6c5356d0-3257-49ed-8f95-4262d33175c9';

All this is being done for a qfield project,.

I would like to solve the result of this sql query during data collection,
that is, I create a point with gps, select the type of the find, and in the
material column, only those values are displayed that are assigned to this
type in the connection table.
_______________________________________________
QGIS-User mailing list
QGIS-User@lists.osgeo.org
List info: https://lists.osgeo.org/mailman/listinfo/qgis-user
Unsubscribe: https://lists.osgeo.org/mailman/listinfo/qgis-user

Reply via email to