Frage

Ich versuche, diese Abfrage zum Laufen zu bringen, erhalte jedoch die folgende Fehlermeldung:Unbekannte Spalte „zips.city“ in „haveing-Klausel“

`$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());`

Meine Zip-Tabelle hat eine Stadtspalte, daher bin ich mir nicht sicher, wo das Problem liegt. Ich weiß, dass ich auf die Datenbank zugreife, weil ich diese Abfrage ohne Fehler ausführen kann:

$zip1query = "SELECT 
         zips.*
         FROM 
         zips
         WHERE
         zips.zip = '$zip'              
         ";

Für jeden Rat wäre ich sehr dankbar!Danke!

War es hilfreich?

Lösung

Die having Klausel bedeutet nicht das Gleiche wie die where Klausel: Wenn Sie eine einfache Abfrage ausführen, sollten Sie where verwenden - das ist, was Sie in Ihrer zweiten Abfrage haben, dass Werke

.

having wird verwendet, wenn der Zustand auf dem Ergebnis einer group by Klausel angewandt werden muss.


Was bedeutet, dass, hier, Ihre Frage auf diese Weise gebaut werden sollte:

$query = "SELECT zips.*
    FROM zips
    where zips.city LIKE '%$city%' 
        AND zips.stateabbr LIKE '%$state%' 
    LIMIT 1";


Damit, wenn Sie noch eine Fehlermeldung über eine nicht vorhandene oder nicht-gefunden Spalte (zumindest für city und / oder stateabbr) , wird es sein, weil diese Spalte nicht in existiert IhrFormal Tabelle.

In diesem Fall gibt es nicht viel was wir tun können: Sie werden die Struktur der Tabelle zu überprüfen, um zu bestimmen, welche Spalten enthält

.

Sie können diese Struktur überprüfen ein webbasiertes Tool wie phpMyAdmin verwenden, oder unter Verwendung einer SQL-Anweisung wie:

desc zips;


Als Referenz zitiert MySQL Handbuch Seite für select :

  

Der SQL-Standard verlangt, dass HAVING   Referenz muss nur Spalten in der   GROUP BY Klausel oder Spalten verwendet in   Aggregatfunktionen.
...
  
Verwenden HAVING nicht für Gegenstände, die   sollte in der WHERE Klausel sein.   
Zum Beispiel, schreiben Sie nicht die   Folgendes ein:

SELECT col_name FROM tbl_name HAVING col_name > 0;
     

Schreiben Sie stattdessen:

SELECT col_name FROM tbl_name WHERE col_name > 0;
     

...   
  Die HAVING Klausel kann sich auf   Aggregatfunktionen, die die WHERE   Klausel kann nicht

Andere Tipps

Versuchen Sie es mit WHERE anstatt HAVING.

Der richtige Weg, es zu tun ist durch die Verwendung eines WHERE-Klausel.

$query = "SELECT
zips.*
FROM
zips
WHERE
zips.city LIKE '%$city%' 
AND
zips.stateabbr LIKE '%$state%' 
LIMIT 1";

hat, verwendet werden, wenn Sie Gruppierung finden Sie unter hier für eine Erklärung

o jeez sorry guys dachte ich, das Problem, habe ich anscheinend einen Raum vor Ort, wenn ich die Spalten in meiner Tabelle mit dem Namen. so i umbenannt die Spalte und es funktioniert trotzdem danke Burschen! aber mit der Funktion, wo stattdessen muss Geschwindigkeit Dinge von bis alot, Danke Jungs!

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top