Hulp nodig met een query

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Snelle Jaap

Snelle Jaap

10/06/2016 13:30:14
Quote Anchor link
Ik probeer wat data uit drie verschillende tabellen te joinen maar kom er niet precies uit hoe dat moet.

Eerst wat afbeeldingen van de database structuur:

Dit is de basis tabel:

Alleen 'id' is hier belangrijk.

Afbeelding

'snm_fieldsandfilters_connections'

Hier is 'element_id' belangrijk die is dezelfde waarde als 'id' in de volgende tabel

Afbeelding

'snm_fieldsandfilters_elements'

Hier is het 'item_id' belangrijk, die is hetzelfde als 'id' bij snm_content

Afbeelding

Hoe kan ik deze tabellen mergen in 1 array resultaat?

Stel ik maak een nieuw artikel aan (snm_content tabel), die heeft id 4, dan komt er een nieuwe row in 'snm_fieldsandfilters_connections' met 'element_id' 22 die is hetzelfde als het 'id' in 'snm_fieldsandfilters_elements' en het 'item_id' in die tabel is weer hetzelfde als 'id' in 'snm_content'.

Op die manier wil ik het 'field_value_id' koppelen aan het 'id' van een artikel in 'snm_content'.

Hoe kan ik dit het beste doen?

Ik dacht eerst dat ik er was met de volgende query:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
<?
SELECT snm_content.*, snm_fieldsandfilters_connections.element_id, snm_fieldsandfilters_connections.field_value_id, snm_fieldsandfilters_elements.id
FROM snm_content
LEFT JOIN snm_fieldsandfilters_elements
ON snm_fieldsandfilters_connections.element_id=snm_fieldsandfilters_elements.id
LEFT JOIN snm_fieldsandfilters_connections
ON snm_content.id=snm_fieldsandfilters_connections.element_id
WHERE snm_content.catid IN ('10')
ORDER BY snm_content.ordering LIMIT 0,4
?>


Maar dat werkte toch niet.
Gewijzigd op 10/06/2016 13:37:20 door Snelle Jaap
 
PHP hulp

PHP hulp

20/04/2024 15:57:22
 
Ivo P

Ivo P

10/06/2016 14:35:42
Quote Anchor link
zet de regels 4 en 5 eens onder 6 en 7

Je ON clause op regel 6 zoekt namelijk iets in de connections tabel, maar die heb je daarboven nog niet gebruikt.
 
Snelle Jaap

Snelle Jaap

10/06/2016 14:41:59
Quote Anchor link
Ivo P op 10/06/2016 14:35:42:
zet de regels 4 en 5 eens onder 6 en 7

Je ON clause op regel 6 zoekt namelijk iets in de connections tabel, maar die heb je daarboven nog niet gebruikt.


Dit geeft NULL NULL NULL bij de rijen: element_id field_value_id en id

Als ik uit een dropdown een selectie maak is dat 20 tot en met 37 (dat is het field_value_id) dat field value zit dus niet rechtstreeks gekoppeld aan snm_content (waar mijn artikelen staan opgeslagen) maar in snm_fieldsandfilters_connections, daar is het element_id hetzelfde als het id in snm_fieldsandfilters_elements waarin item_id wel weer hetzelfde is als id in snm_content.

Dus eigenlijk moet ik via een omweg id in snm_content vergelijken met item_id in snm_fieldsandfilters_elements. En daarbij het bijbehorende field_value_id ophalen.
 
Jan de Laet

Jan de Laet

11/06/2016 14:48:20
Quote Anchor link
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
SELECT
  snm_content.*,
  c.element_id,
  c.field_value_id,
  e.id
FROM snm_content
LEFT OUTER JOIN snm_fieldsandfilters_elements AS e ON e.item_id = snm_content.id
LEFT OUTER JOIN snm_fieldsandfilters_connections AS c ON c.element_id = e.id
snm_content.catid IN ('10')
ORDER BY snm_content.ordering LIMIT 0,4


Regel 7 koppelt elements aan content via item_id en id
Regel 8 koppelt connections aan elements via element_id en id
Om te verkorten heb ik alias e en c geïntroduceerd.
Gewijzigd op 11/06/2016 14:51:26 door Jan de Laet
 
Snelle Jaap

Snelle Jaap

15/06/2016 15:59:30
Quote Anchor link
Jan de Laet op 11/06/2016 14:48:20:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
SELECT
  snm_content.*,
  c.element_id,
  c.field_value_id,
  e.id
FROM snm_content
LEFT OUTER JOIN snm_fieldsandfilters_elements AS e ON e.item_id = snm_content.id
LEFT OUTER JOIN snm_fieldsandfilters_connections AS c ON c.element_id = e.id
snm_content.catid IN ('10')
ORDER BY snm_content.ordering LIMIT 0,4


Regel 7 koppelt elements aan content via item_id en id
Regel 8 koppelt connections aan elements via element_id en id
Om te verkorten heb ik alias e en c geïntroduceerd.


Top! Ik had hem zelf al gefixed met een soortgelijke query. Duurde een paar uur maar ik kreeg hem uiteindelijk door. Thanks.
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.