problema query
sto impazzendo con una query
select
n.nid ,title,
d.field_numerogoal_value AS goal,
d.field_nid_partita_nid AS partita
from node n
left join content_type_giocatore g on n.nid = g.nid
left join content_type_dati_giocatore d on n.nid = d.field_nid_giocatore_nid
where g.field_squadragiocatore_nid=261 and d.field_nid_partita_nid =320
praticamente questa mi da la lista di giocatori con il numero di goal della squadra 261 che hanno giocato nella partita 320
va tutto bene se la partita è già stata salvata nei content_type_dati_giocatore e quindi già giocata..
ma se la partita non è ancora stata salvata nei content_type_dati_giocatore quindi è la prima volta, io voglio che mi appaiono lo stesso tutta la lista dei giocatori della 261
Risposte
Ciao, senza conoscere lo
Ciao, senza conoscere lo schema del db non è facile. A occhio potresti provare modificare la clausola where:
where g.field_squadragiocatore_nid=261 and
(d.field_nid_partita_nid=320 OR d.field_nid_partita_nid IS NULL)
che esce fuori?
no .. mi da sempre 0
no .. mi da sempre 0 record..
allora la tabella content_type_dati_giocatore è questa
http://www.imgpaste.com/i/mfveg.png
mentre la content_type_giocatore
è questa
http://www.imgpaste.com/i/gkvfa.png
Prova a darmi i risultati di
Prova a darmi i risultati di queste due query:
select n.nid ,title
from node n
inner join content_type_giocatore g on n.nid = g.nid and g.field_squadragiocatore_nid=261
ed eventualmente
select
n.nid ,title,
d.field_numerogoal_value AS goal,
d.field_nid_partita_nid AS partita
from node n
inner join content_type_giocatore g on n.nid = g.nid and g.field_squadragiocatore_nid=261
left join content_type_dati_giocatore d on n.nid = d.field_nid_giocatore_nid and d.field_nid_partita_nid=320
perfetto.. con la seconda
perfetto..
con la seconda query funziona tutto..
dove sbagliavo io??
non capisco molto la inner
Ok, la prima mi sarebbe solo
Ok, la prima mi sarebbe solo servita per capire se c'erano risultati.
La inner l'ho inserita perchè nel join non ha senso portarsi dietro le tuple "dangling" quelle per cui a destra ci sarebbero solamente valori NULL (se field_squadragiocatore_nid<>261). Per vedere le differenza tra gli insiemi di record prova a mettere un * per vedere tutti i campi estratti, a modificare poi le query con left/inner e a spostare le condizioni nella clausola where (com'era inizialmente). Noterai la diversità degli insiemi.