Visualizzazione dei risultati da 1 a 4 su 4
  1. #1
    Utente di HTML.it L'avatar di tigh
    Registrato dal
    Dec 2007
    Messaggi
    52

    [mysql] query con espressione

    ho una tabella "fits" strutturata così:

    fits_id
    description
    dec_f
    ra_f

    dove dec_f e ra_f sono coordinate astronomiche, ma questo è irrilevante per il problema...

    poi ho la seguente query che seleziona dalla tabella fits tutti gli oggetti per cui la distanza angolare da un punto definito dal $dec_c e $ra_c è minore di un dato valore ($r)

    SELECT * FROM fits
    WHERE 2 * ASIN( SQRT(SIN(($dec_c-dec_f)/2)
    * SIN(($dec_c-dec_f)/2) + COS($dec_c) * COS(dec_f)
    * SIN(($ra_c - ra_f)/2) * SIN(($ra_c - ra_f)/2))) <= $r


    ovvero per semplificare:

    SELECT * FROM fits
    WHERE (espressione) <= $r

    io però avrei bisogno di modificare la query perchè mi prendesse solo la riga per cui la distanza è minima, ovvero solo la riga che rende minima l'espressione:
    2 * ASIN( SQRT(SIN(($dec_c-dec_f)/2)
    * SIN(($dec_c-dec_f)/2) + COS($dec_c) * COS(dec_f)
    * SIN(($ra_c - ra_f)/2) * SIN(($ra_c - ra_f)/2)))

    ho fatto un po' di tentativi usando la funzione MIN di mysql ma evidentemente sbaglio...

    ovvero se io faccio:

    SELECT MIN(espressione) FROM fits

    mi restituisce i valore minimo dell'espressione e fin qui va bene, ma come faccio ad avere il valore del fits_id della riga corrispondente?

    ho provato così

    SELECT * FROM fits
    WHERE (SELECT MIN(espressione) FROM fits)

    ma non funziona non mi restituisce nessuna riga...
    My name is Saul Tigh, I am an officer in the Colonial Fleet. Whatever else I am, whatever else it means, that's the man I want to be. And if I die today, that's the man I'll be.

  2. #2
    Utente di HTML.it L'avatar di luca200
    Registrato dal
    Apr 2002
    Messaggi
    4,120
    SELECT *, (espressione) as expr FROM fits
    order by expr limit 1

  3. #3
    Utente di HTML.it L'avatar di tigh
    Registrato dal
    Dec 2007
    Messaggi
    52
    perfetto grazie mille!!!
    My name is Saul Tigh, I am an officer in the Colonial Fleet. Whatever else I am, whatever else it means, that's the man I want to be. And if I die today, that's the man I'll be.

  4. #4
    Utente di HTML.it L'avatar di tigh
    Registrato dal
    Dec 2007
    Messaggi
    52
    ho un nuovo problema:
    dovrei aggiungere alla query precedente una clausola where...
    provo a spiegarmi: nel db ho due tabelle "survey" e "fits" così strutturate:

    survey:
    survey_id
    description
    ... altri campi


    fits:
    fits_id
    survey_id
    description
    dec_f
    ra_f

    e io dovrei ricercare nella tabella fits in base all'espressione spiegata sopra ma cercando solo le righe con un determinato valore del campo survey_id (che ho ottenuto da una query precedente sulla tabella "survey")
    ho provato a fare qualcosa del genere:

    SELECT *, (espressione) as expr FROM fits
    order by expr limit 1
    WHERE survey_id=1;

    ma ovviamente così non funziona...

    _______________________________
    EDIT:

    ok risolto, ovviamente era una fesseria... son io che son stordito!!!

    SELECT *, (espressione) as expr FROM fits
    where survey_id=1
    order by expr limit 1
    My name is Saul Tigh, I am an officer in the Colonial Fleet. Whatever else I am, whatever else it means, that's the man I want to be. And if I die today, that's the man I'll be.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.