1

私のコード:

SELECT pulpi_juegos.*, mapa.cat_id AS IDcategoria 
FROM pulpi_juegos 
INNER JOIN pulpi_categorias_mapa AS mapa ON pulpi_juegos.id=mapa.game_id 
WHERE pulpi_juegos.Estado != 1 
AND IDcategoria = 15 
ORDER BY pulpi_juegos.id DESC 
LIMIT 0,30;

問題は、次のエラーが表示されることです。

Unknown column 'IDcategoria' in 'where clause'

理由を知っている人はいますか?

4

4 に答える 4

2

mysqlは後でSELECTを実行するため、IDCategoriaの代わりにmapa.cat_idを使用します。

SELECT pulpi_juegos.*, mapa.cat_id AS IDcategoria 
FROM pulpi_juegos 
INNER JOIN pulpi_categorias_mapa AS mapa ON pulpi_juegos.id=mapa.game_id 
WHERE pulpi_juegos.Estado != 1 
AND mapa.cat_id = 15 
ORDER BY pulpi_juegos.id DESC 
LIMIT 0,30;

この注文のように

FROM clause
WHERE clause
GROUP BY clause
HAVING clause
SELECT clause
ORDER BY clause
于 2012-05-02T09:21:29.750 に答える
1

WHERE句にエイリアスを入れることはできません。

これを使って:

SELECT pulpi_juegos.*, mapa.cat_id AS IDcategoria 
FROM pulpi_juegos 
INNER JOIN pulpi_categorias_mapa AS mapa ON pulpi_juegos.id=mapa.game_id 
WHERE pulpi_juegos.Estado != 1 
AND mapa.cat_id = 15 
ORDER BY pulpi_juegos.id DESC 
LIMIT 0,30;

幸運を。

于 2012-05-02T09:22:21.580 に答える
1

SQLは常にステートメントを実行してからSELECTステートメントを実行しますWHERE。私が間違っているが、SQLがあなたのステートメントを次のように実行する場合は私を訂正してください:

FROM
INNER JOIN
WHERE
AND
SELECT
ORDER BY

ご覧のとおり、SQLがステートメントに来るとき、それが実際にとして表されANDているかどうかはまだわかりません。簡単な解決策は、をに変更することです。 したがって、クエリは次のようになります。mapa.cat_idIDcategoriaIDcategoriaANDmapa.cat_id

SELECT pulpi_juegos.*, mapa.cat_id AS IDcategoria 
FROM pulpi_juegos 
INNER JOIN pulpi_categorias_mapa AS mapa ON pulpi_juegos.id=mapa.game_id 
WHERE pulpi_juegos.Estado != 1 
AND mapa.cat_id = 15 
ORDER BY pulpi_juegos.id DESC 
LIMIT 0,30;
于 2012-05-02T09:22:22.687 に答える
1

where句でエイリアスを使用することはできません。代わりに、列名を記述する必要があります。このようなサブクエリを使用する必要がある場所でエイリアスを使用する場合

SELECT * FROM (SELECT pulpi_juegos.*, mapa.cat_id AS IDcategoria 
FROM pulpi_juegos 
INNER JOIN pulpi_categorias_mapa AS mapa ON pulpi_juegos.id=mapa.game_id 
WHERE pulpi_juegos.Estado != 1  
ORDER BY pulpi_juegos.id DESC 
LIMIT 0,30) WHERE IDcategoria = 15 ;

今それは動作します。

于 2012-05-02T09:22:51.567 に答える