mysql php query clausola HAVING
Domanda
Im cercando di ottenere la query funziona ma mi da questo errore:Unknown column 'cerniere.citta' in 'clausola having'
`$query = "SELECT zips.* FROM zips HAVING zips.city LIKE '%$city%' AND zips.stateabbr LIKE '%$state%' LIMIT 1"; $result = mysql_query($query) or die (mysql_error());`
il mio cerniere tabella ha una colonna city, così im non sicuro di quello che è il problema, so di accesso al database, perché sono in grado di eseguire questa query senza errori:
$zip1query = "SELECT zips.* FROM zips WHERE zips.zip = '$zip' ";
qualsiasi consiglio sarebbe molto apprezzato!grazie!
Soluzione
La clausola having
non significa la stessa cosa che la clausola where
: quando si esegue una query semplice, è necessario utilizzare where
- che è quello che avete fatto nella vostra seconda query, che le opere
having
viene utilizzato quando la condizione deve essere applicata sul risultato di una clausola group by
.
Il che significa che, qui, la query dovrebbe essere costruire in questo modo:
$query = "SELECT zips.*
FROM zips
where zips.city LIKE '%$city%'
AND zips.stateabbr LIKE '%$state%'
LIMIT 1";
Con questo, se avete ancora un errore su una colonna non esistente o non-trovati (almeno per city
e / o stateabbr
) , sarà perché la colonna non esiste nella tua tavolo.
In questo caso, non c'è molto che possiamo fare: si dovrà verificare la struttura della tabella, per determinare le colonne contiene
.È possibile verificare che la struttura utilizzando uno strumento web-based come phpMyAdmin, oppure utilizzando un'istruzione SQL, ad esempio:
desc zips;
Per riferimento, citando pagina di manuale di MySQL per select
:
Lo standard SQL richiede che avere deve fare riferimento solo colonne nella clausola
GROUP BY
o colonne utilizzate in funzioni di aggregazione.
...
non utilizzareHAVING
per gli elementi che dovrebbe essere nella clausolaWHERE
.
Per esempio, non scrivere il seguenti:SELECT col_name FROM tbl_name HAVING col_name > 0;
Scrivi questo, invece:
SELECT col_name FROM tbl_name WHERE col_name > 0;
...
La clausolaHAVING
può riferirsi a funzioni di aggregazione che laWHERE
clausola non possono
Altri suggerimenti
Provare a utilizzare WHERE
invece di HAVING
.
Il modo corretto per farlo è quello di utilizzare una clausola WHERE.
$query = "SELECT
zips.*
FROM
zips
WHERE
zips.city LIKE '%$city%'
AND
zips.stateabbr LIKE '%$state%'
LIMIT 1";
si trova a dover utilizzare quando si esegue il raggruppamento, vedere qui per una spiegazione
o Jeez scusate ragazzi ho capito il problema, a quanto pare ho messo uno spazio prima città quando ho chiamato le colonne nel mio tavolo. così ho rinominato la colonna e funziona grazie comunque chaps! ma usando la funzione in cui invece di avere le cose velocità deve up molto, grazie ragazzi!