Contar dias entre resultados

Pessoal, boa tarde. Gostaria de contar com a ajuda (e sugestões) de vocês.

Tenho desenvolvido um sistema de cotação de diárias para hotéis no qual é realizado uma busca entre uma data inicial e uma data final atraves de uma query no mysql, e essa query me retorna as respectivas diárias cadastradas entre essas duas datas. (cada diária cadastrada também possui uma data inicial e final)

A query me retorna exatamente o que eu preciso, porém ainda me falta algo: Que ela me retorne o numero de dias dentro de cada diária.

Pode ser tanto com a quantidade de dias ou as duas datas.

Minha query é a seguinte:

//explicação das variaveis
$id_hotel //id do hotel
$datainicial_diaria // data inicial da diária cadastrada no sistema
$datafinal_diaria // data final da diária cadastrada no sistema
$datainicial //data inicial buscada 
$datafinal //data final buscada
SELECT * 
FROM diarias_tb
WHERE id_hotel = ('$id_hotel')
AND ((datainicial_diaria between ('$datainicial') and ('$datafinal'))
OR (datafinal_diaria between ('$datainicial') and ('$datafinal'))
OR (('$datainicial') between datainicial_diaria and datafinal_diaria)
OR (('$datafinal') between datainicial_diaria and datafinal_diaria))

Vou deixar um exemplo prático também:

(considerando que esses datas estão no bd)

Diária de Outubro - 01/10/2013 a 31/10/2013 - R$ 100,00
Diária de Novembro - 01/11/2013 a 31/11/2013 - R$ 200,00

E o cliente realize uma busca entre as datas 10/10/2013 e 10/11/2013

ele exiba dessa forma:

Dias nessa diária - 21
OU
de 10/10/2013 a 31/10/2013
Nome da Diária - Diária de Outubro

Dias nessa diária - 10
OU
de 01/11/2013 a 10/11/2013
Nome da Diária - Diária de Novembro

Qual é o banco de dados? No PostgreSQL, por exemplo, pode-se usar date_part. No MySQL, datediff…

É mysql! Você poderia me dar um exemplo do uso por favor? Obrigado!

É que eu realmente não sei como usar o datediff no mysql para comparar as datas, já que podem haver vários resultados, não sei exatamente comparar ‘quem com quem’.

Site do mysql:
http://dev.mysql.com/doc/refman/5.5/en/date-and-time-functions.html#function_datediff

mysql> SELECT DATEDIFF(‘2007-12-31 23:59:59’,‘2007-12-30’);
-> 1
mysql> SELECT DATEDIFF(‘2010-11-30 23:59:59’,‘2010-12-31’);
-> -31

É só substituir pelo campo do banco (data final, data inicial)

Dessa forma?

SELECT * 
FROM diarias_tb
WHERE id_hotel = ('6')
AND ((datainicial_diaria between ('2013-10-05') and ('2013-11-05'))
OR (datafinal_diaria between ('2013-10-05') and ('2013-11-05'))
OR (('2013-10-05') between datainicial_diaria and datafinal_diaria)
OR (('2013-11-05') between datainicial_diaria and datafinal_diaria))
DATEDIFF(datainicial_diaria, datafinal_diaria)

No select:

SELECT *,DATEDIFF(datainicial_diaria, datafinal_diaria) FROM etc..

Aí você terá uma coluna com a diferença em dias.

Pessoal, mudei minha query:

datafinal_diaria e datainicial_diaria são as datas da diaria cadastrada no sistema.

SELECT
	*, DATEDIFF(d.datafinal_diaria, d.datainicial_diaria) DiasDiaria
FROM
	diarias_tb d
WHERE
	id_hotel='6'
	AND 
	((datainicial_diaria between '2013-09-01' and '2014-01-04') OR (datafinal_diaria between '2013-09-01' and '2014-01-04'))

Dessa forma é QUASE o que eu to tentando. Ela me retorna TODOS os dias daquela diária cadastrada. Alguém sabe como me dizer como eu faria para que ela retornasse apenas os dias que estão naquela diária? Por exemplo.

Se a diaria começa dia 01/10 e termina 30/10, me exibir ‘20’ e não ‘30’ como ocorre no momento.