91 messaggi dal 27 ottobre 2009
Ciao a tutti,
per un forum ho creato due tabelle, una per le news e l'altra i commenti.
Ora le tabelle, che ho nominato News e NewsQuote, vengono richiamate da due SELECT, code in front.

News
"SELECT News.[id], News.[titolo], News.[contenuto], News.[data], News.[nome] FROM [News] WHERE [attivo] = 'true' AND (News.[id]=@id) ORDER BY [data] DESC"

NewsQuote
"SELECT NewsQuote.[idNews], NewsQuote.[id], NewsQuote.[contenutoQuote], NewsQuote.[dataQuote], NewsQuote.[nomeQuote] FROM [NewsQuote] WHERE [attivoQuote] = 'true' AND (NewsQuote.[idNews]=@id) ORDER BY [dataQuote]"

In questo modo riesco ad avere una news e tutti i commenti ordinati per data. Il tutto lavora bene, pero' vorrei riuscire a richiamare le due tabelle con una sola SELECT.
Ho provato con DISTINCT e GROUP BY, ma i record della tabella News, vengono sempre duplicati per ogni record di NewsQuote.

Posso unire le due tabelle eliminando i dati duplicati?
Sarebbe stato meglio una unica tabella?


Grazie.
21 messaggi dal 17 novembre 2006
Prova una cosa del genere.
Ho commentato il parametro, così se incolli tutto su Sql Management ti estrae tutte le notizie e i commenti


SELECT
N.[id]
, N.[titolo]
, N.[contenuto]
, N.[data]
, N.[nome]
, Q.[idNews]
, Q.[id]
, Q.[contenutoQuote]
, Q.[dataQuote]
, Q.[nomeQuote]
FROM [News] N
INNER JOIN NewsQuote Q
ON N.id = Q.newsId
WHERE
N.[attivo] = 'true'
-- AND (N.[id]=@id)
AND Q.[attivoQuote] = 'true'
ORDER BY N.[data], Q.[dataQuote] DESC
Modificato da mdmiko il 28 novembre 2012 09.45 -
91 messaggi dal 27 ottobre 2009
mdmiko ha scritto:
Prova una cosa del genere.
Ho commentato il parametro, così se incolli tutto su Sql Management ti estrae tutte le notizie e i commenti


SELECT
N.[id]
, N.[titolo]
, N.[contenuto]
, N.[data]
, N.[nome]
, Q.[idNews]
, Q.[id]
, Q.[contenutoQuote]
, Q.[dataQuote]
, Q.[nomeQuote]
FROM [News] N
INNER JOIN NewsQuote Q
ON N.id = Q.newsId
WHERE
N.[attivo] = 'true'
-- AND (N.[id]=@id)
AND Q.[attivoQuote] = 'true'
ORDER BY N.[data], Q.[dataQuote] DESC
Modificato da mdmiko il 28 novembre 2012 09.45 -




Ciao e grazie per la risposta.
La SELECT funziona, ma, se non ho sbagliato qualcosa, estrae ancora tutte le news collegate ai commenti.
Magari non si puo' fare, ma quello che vorrei visualizzare nella GridView e' una sola news e tutti i commenti.

Dai dimmi che non si puo' fare, cosi' mi metto il cuore in pace :-)
383 messaggi dal 23 aprile 2007
teoricamente si può fare, con qualcosa di simile( non è esattamente semplice ma un paio di volte l'ho usata):

SELECT News.[id],
News.[titolo],
News.[contenuto],
News.[data],
News.[nome] ,

(
SELECT NewsQuote.[idNews], NewsQuote.[id], NewsQuote.[contenutoQuote], NewsQuote.[dataQuote], NewsQuote.[nomeQuote]
FROM [NewsQuote]
WHERE [attivoQuote] = 'true'
AND (NewsQuote.[idNews]=News.[id])
FOR XML AUTO
) as 'xmlNewsQuote'
FROM [News]
WHERE [attivo] = 'true'
AND (News.[id]=@id)
ORDER BY [data] DESC

per l'xml auto controlla qui:
http://msdn.microsoft.com/en-us/library/ms178107.aspx

come risultato avrai per ogni riga delle News una nuova colonna xmlNewsQuote in cui troverai le newsquote in formato xml(magari non semplice da gestire ma in alcuni casi può anche far comodo).
Modificato da historyX il 28 novembre 2012 15.09 -
91 messaggi dal 27 ottobre 2009
historyX ha scritto:
teoricamente si può fare, con qualcosa di simile( non è esattamente semplice ma un paio di volte l'ho usata):

SELECT News.[id],
News.[titolo],
News.[contenuto],
News.[data],
News.[nome] ,

(
SELECT NewsQuote.[idNews], NewsQuote.[id], NewsQuote.[contenutoQuote], NewsQuote.[dataQuote], NewsQuote.[nomeQuote]
FROM [NewsQuote]
WHERE [attivoQuote] = 'true'
AND (NewsQuote.[idNews]=News.[id])
FOR XML AUTO
) as 'xmlNewsQuote'
FROM [News]
WHERE [attivo] = 'true'
AND (News.[id]=@id)
ORDER BY [data] DESC

per l'xml auto controlla qui:
http://msdn.microsoft.com/en-us/library/ms178107.aspx

come risultato avrai per ogni riga delle News una nuova colonna xmlNewsQuote in cui troverai le newsquote in formato xml(magari non semplice da gestire ma in alcuni casi può anche far comodo).
Modificato da historyX il 28 novembre 2012 15.09 -



Ciao e grazie mille per la risposta.
Se mi dici che non e' semplice, mi fa pensare che il mio approccio non e' sbagliato, come pensavo.
Il mio scopo era di semplificare il piu' possibile il codice. Invece a quanto pare lo complico.
A questo punto tengo le due SELECT.

Per quanto riguarda invece le due tabelle separate, una per le news e una per le risposte, pensi sia la soluzione migliore o dovrei pensare di unirle?
383 messaggi dal 23 aprile 2007
in generale posso dirti che dipende da che uso ne fai e dalla quantità di dati: se per esempio visualizzi su una gridview(o altro oggetto simile) le news e su un'altra le quotes(magari alla selezione sulla prima), la soluzione con 2 query è probabilmente la più funzionale.

Se invece utilizzi un unico oggetto per visualizzare tutti i dati la quantità di dati ha maggiore importanza: ossia se hai 1000 news ciascuna con 100 quotes la query unica tirerà fuori 100.000 record per cui reperire i dati potrebbe risultare troppo dispendioso ed essere soggetto ad eventuali timeout.

in ultima istanza (come consiglio) scegli una strada e seguila fino in fondo, se poi ti rendi conto che è "lenta" o "poco funzionale", cambi strada :D

ciao
sergio
91 messaggi dal 27 ottobre 2009
historyX ha scritto:
in generale posso dirti che dipende da che uso ne fai e dalla quantità di dati: se per esempio visualizzi su una gridview(o altro oggetto simile) le news e su un'altra le quotes(magari alla selezione sulla prima), la soluzione con 2 query è probabilmente la più funzionale.

Se invece utilizzi un unico oggetto per visualizzare tutti i dati la quantità di dati ha maggiore importanza: ossia se hai 1000 news ciascuna con 100 quotes la query unica tirerà fuori 100.000 record per cui reperire i dati potrebbe risultare troppo dispendioso ed essere soggetto ad eventuali timeout.

in ultima istanza (come consiglio) scegli una strada e seguila fino in fondo, se poi ti rendi conto che è "lenta" o "poco funzionale", cambi strada :D

ciao
sergio



Grazie Sergio,
consigli chiarissimi e molto utili.
Mi hai fatto apprezzare il lavoro fatto.
Ciao.
21 messaggi dal 17 novembre 2006
Due tabelle: sono due entità diverse quindi credo corretto mantenerli separati.

Non capisco lo scopo di avere intabbellate le news e tutti i commenti.
Ad esempio come caso d'uso mi verrebbe in mente:
1) la lista delle news, e il numero di commenti per ogni news.
2) una news con i relativi commenti

per quello che è la mia povera esperienza, sono sempre due tabelle con relazione uno a molti. L'unica volta che ho visto una cosa del genere è nel profile provider di asp.net (subito customizzato per usare sql con una tabella collegata).

Magari puoi fare un'esempio di come useresti il "tabellone" unico?

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.