简体   繁体   English

MySQL Select 语句与 where 条件和内部连接

[英]MySQL Select statement with where condition and inner join

I am using Geodesic Solutions.我正在使用测地线解决方案。 I need help with a query since I'm making an addon.由于我正在制作插件,因此我需要查询帮助。 The tables in my database that I need to query are我需要查询的数据库中的表是

geodesic_leveled_field_value_languages
 -id
 -language_id
 -name

geodesic_leveled_field_value
 -id
 -leveled_id
 -parent
 -leveled_field
 -enabled
 -display_order

My Sql Statement is我的 Sql 声明是

$sqlSelect = "SELECT geodesic_leveled_field_value_languages.name AS \"FieldName\", geodesic_leveled_field_value.leveled_field AS \"FieldLevel\" FROM `geodesic_leveled_field_value` INNER JOIN `geodesic_leveled_field_value_languages` on geodesic_leveled_field_value.id = geodesic_leveled_field_value_languages.id";

I want it to return only the Names (from geodesic_leveled_field_value_languages table) for a specific leveled_value (in geodesic_leveled_field_value table)我希望它只返回特定 leveled_value 的名称(来自 geodesic_leveled_field_value_languages 表)(在 geodesic_leveled_field_value 表中)

I've also tried the following query but no luck我也尝试过以下查询,但没有运气

 $sqlSelect = "SELECT geodesic_leveled_field_value_languages.name AS \"FieldName\", geodesic_leveled_field_value.leveled_field AS \"FieldLevel\" FROM `geodesic_leveled_field_value` where geodesic_leveled_field_value.leveled_field = 2 INNER JOIN `geodesic_leveled_field_value_languages` on geodesic_leveled_field_value.id = geodesic_leveled_field_value_languages.id";

The sql will look something like this: sql 看起来像这样:

SELECT 
    gl.name
FROM
    geodesic_leveled_field_value_languages gl 
    INNER JOIN geodesic_leveled_field_value gv ON gv.id = gl.id
WHERE
    gv.level='required level value'

NOTE: This sql assumes that the level column is the column you want to filter data with and also assumes that both tables are connected with the id fileds.注意:此 sql 假定 level 列是您要过滤数据的列,并且还假定两个表都与 id 字段连接。

You were missing the select clause where you specify each column from which table you want to return and you were missing the where condition that specifies what to return based in a filter criteria您缺少 select 子句,您在该子句中指定要从哪个表返回的每一列,并且缺少根据过滤条件指定要返回的内容的 where 条件

You can learn more about sql.where clause in the following link https://www.w3schools.com/sql/sql_where.asp您可以在以下链接中了解有关 sql.where 子句的更多信息https://www.w3schools.com/sql/sql_where.asp

Note that gl and gv are aliases.请注意,gl 和 gv 是别名。 You can find out more about aliases on the url您可以在 url 上找到有关别名的更多信息

https://www.w3schools.com/sql/sql_alias.asp https://www.w3schools.com/sql/sql_alias.asp

This has nothing to do with tying这与捆绑无关

You know your database and should know which fields build a relationship.您了解您的数据库,并且应该知道哪些字段建立了关系。

Further you can also use aliases for the tables, that will in future save you some time.此外,您还可以为表格使用别名,这将在将来为您节省一些时间。

Also you can use between two double quotes a single quote or vice versa您也可以在两个双引号之间使用单引号,反之亦然

the field leveled_field in yr query is not in any of the two tables, so i am gusssing you meant the level yr 查询中的字段 leveled_field 不在两个表中的任何一个中,所以我猜测您的意思是级别

$sqlSelect = "SELECT gvl.name AS 'FieldName', gv.level AS 'FieldLevel' FROM `geodesic_leveled_field_value`  gv INNER JOIN `geodesic_leveled_field_value_languages` gvl on gv.id = gvl.id WHERE gv.level > 5;"

I solved my problem with the following query,我用以下查询解决了我的问题,

$sqlSelect = "SELECT geodesic_leveled_field_value_languages.name FROM `geodesic_leveled_field_value` INNER JOIN `geodesic_leveled_field_value_languages` on geodesic_leveled_field_value.id = geodesic_leveled_field_value_languages.id and geodesic_leveled_field_value.leveled_field = 2";

Basically I just added an AND statement after ON clause.基本上我只是在ON子句之后添加了一个AND语句。 It selects the data from the two tables based on both the ON clauses.它根据两个ON子句从两个表中选择数据。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM