arcpy.SelectLayerByAttribute_management(lyr, "NEW_SELECTION", query) arcpy.SelectLayerByAttribute_management(lyr, "SUBSET_SELECTION", query1) arcpy.SelectLayerByAttribute_management(lyr, "SUBSET_SELECTION", query2)
Is it possible to have two subset selections in a tool. As in...arcpy.SelectLayerByAttribute_management(lyr, "NEW_SELECTION", query) arcpy.SelectLayerByAttribute_management(lyr, "SUBSET_SELECTION", query1) arcpy.SelectLayerByAttribute_management(lyr, "SUBSET_SELECTION", query2)
Thanks in advance...
Yes, I have done this before. The final selection will be only those attributes that are in common after all 3 queries.
import arcpy
def main():
arcpy.AddMessage("Starting")
# Get and set variables
sub = arcpy.GetParameterAsText(0)
unit = arcpy.GetParameterAsText(1)
blk = arcpy.GetParameterAsText(2)
layer_name = "tax_acct"
df_name = "Layers"
arcpy.AddMessage(sub)
arcpy.AddMessage(unit)
arcpy.AddMessage(blk)
# Define mxd, df and lyr objects
mxd = arcpy.mapping.MapDocument("CURRENT")
df = arcpy.mapping.ListDataFrames(mxd, df_name)[0]
lyr = arcpy.mapping.ListLayers(mxd, layer_name, df)[0]
arcpy.AddMessage(lyr.name)
# Create where clause for selection
query = "SUBDIVISIO = '%s'" % (sub)
query1 = "UNIT_NUMBE = '%s'" % (unit)
query2 = "BLK_NUM = '%s'" % (blk)
arcpy.AddMessage(query)
arcpy.AddMessage(query1)
arcpy.AddMessage(query2)
try:
arcpy.SelectLayerByAttribute_management(lyr, "NEW_SELECTION", query)
arcpy.SelectLayerByAttribute_management(lyr, "SUBSET_SELECTION", query1)
arcpy.SelectLayerByAttribute_management(lyr, "SUBSET_SELECTION", query2)
except Exception as e:
print e.message
# If using this code within a script tool, AddError can be used to return messages
# back to a script tool. If not, AddError will have no effect.
arcpy.AddError(e.message)
# Get number of selected features
selection = int(arcpy.GetCount_management(layer_name).getOutput(0))
arcpy.AddMessage("%s features selected" % (selection))
# Set df extent to layer selection
df.extent = lyr.getSelectedExtent()
arcpy.RefreshActiveView()
arcpy.AddMessage("Completed")
main()
query = "SUBDIVISIO = '%s'" % (sub) query1 = "UNIT_NUMBE = '%s'" % (unit) query2 = "BLK_NUM = '%s'" % (blk) arcpy.SelectLayerByAttribute_management(lyr, "NEW_SELECTION", query + " AND " + query1 + " AND " + query2)
arcpy.MakeFeatureLayer_management(lyr, "new_layer", query + " AND " + query1 + " AND " + query2)
Wouldn't it be more efficient to just do:query = "SUBDIVISIO = '%s'" % (sub) query1 = "UNIT_NUMBE = '%s'" % (unit) query2 = "BLK_NUM = '%s'" % (blk) arcpy.SelectLayerByAttribute_management(lyr, "NEW_SELECTION", query + " AND " + query1 + " AND " + query2)
or better yet:arcpy.MakeFeatureLayer_management(lyr, "new_layer", query + " AND " + query1 + " AND " + query2)
Executing: SubZoom "SLEEPY HOLLOW" 4 27 Start Time: Wed Sep 12 13:18:14 2012 Running script SubZoom... Starting SLEEPY HOLLOW 4 27 tax_acct SUBDIVISIO = 'SLEEPY HOLLOW' UNIT_NUMBE = '4' BLK_NUM = '27' Traceback (most recent call last): File "G:\Sub.py", line 45, in <module> main() File "G:\Sub.py", line 35, in main arcpy.SelectLayerByAttribute_management(lyr, "NEW_SELECTION", query + " AND " + query1 + " AND " + query2) File "C:\Program Files\ArcGIS\Desktop10.1\arcpy\arcpy\management.py", line 6461, in SelectLayerByAttribute raise e ExecuteError: ERROR 000358: Invalid expression Failed to execute (SelectLayerByAttribute). Failed to execute (SubZoom). Failed at Wed Sep 12 13:18:15 2012 (Elapsed Time: 1.00 seconds)
import arcpy
def main():
arcpy.AddMessage("Starting")
# Get and set variables
sub = arcpy.GetParameterAsText(0)
unit = arcpy.GetParameterAsText(1)
blk = arcpy.GetParameterAsText(2)
lot = arcpy.GetParameterAsText(3)
layer_name = "tax_acct"
df_name = "Layers"
arcpy.AddMessage(sub)
arcpy.AddMessage(unit)
arcpy.AddMessage(blk)
arcpy.AddMessage(lot)
# Define mxd, df and lyr objects
mxd = arcpy.mapping.MapDocument("CURRENT")
df = arcpy.mapping.ListDataFrames(mxd, df_name)[0]
lyr = arcpy.mapping.ListLayers(mxd, layer_name, df)[0]
arcpy.AddMessage(lyr.name)
# Create where clause for selection
query = "SUBDIVISIO = '%s'" % (sub)
query1 = "UNIT_NUMBE = '%s'" % (unit)
query2 = "BLOCK_NUMB = '%s'" % (blk)
query3 = "LOT_NUMBER = '%s'" % (lot)
arcpy.AddMessage(query)
arcpy.AddMessage(query1)
arcpy.AddMessage(query2)
arcpy.AddMessage(query3)
arcpy.SelectLayerByAttribute_management(lyr, "NEW_SELECTION", query)
arcpy.SelectLayerByAttribute_management(lyr, "SUBSET_SELECTION", query1)
arcpy.SelectLayerByAttribute_management(lyr, "SUBSET_SELECTION", query2)
arcpy.SelectLayerByAttribute_management(lyr, "SUBSET_SELECTION", query3)
# Set df extent to layer selection
df.extent = lyr.getSelectedExtent()
arcpy.RefreshActiveView()
arcpy.AddMessage("Completed")
main()